婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面

在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面

熱門標簽:400電話辦理怎么樣 蘇州如何辦理400電話 外呼電話機器人成本 聯(lián)通官網(wǎng)400電話辦理 地圖標注軟件免費下載 百應(yīng)電話機器人外呼系統(tǒng) 臨沂智能電話機器人加盟 西寧呼叫中心外呼系統(tǒng)線路商 網(wǎng)絡(luò)電話外呼系統(tǒng)上海

簡介

  顯示大量已經(jīng)按類別(不是很多)排序的數(shù)據(jù)但沒有類別分界線,用戶很難找到所需要的類別。例如,數(shù)據(jù)庫中只有9個類別(8個不同的類別和1個null),共81種產(chǎn)品.現(xiàn)在用一個GridView列出所有產(chǎn)品,假設(shè)有用戶對類別Seafood的產(chǎn)品感興趣,她一定會按類別排序,把Seafood產(chǎn)品排列在一起.排序后,用戶便尋找Seafood產(chǎn)品開始和結(jié)束的地方。雖然是按英文字母排列類別不難找到Seafood,但仍要花些時間在GridView尋找。為了進一步的區(qū)分類別,許多網(wǎng)站使用類別分界線這種排序用戶界面來區(qū)別不同的類別。例如像圖1中的分界線可以使用戶很快地找到需要的類別。

圖1:不同組明顯的區(qū)分開來

在這篇文章中我們將講解如何創(chuàng)建這種排序用戶界面.

步驟1:創(chuàng)建一個普通的,能夠排序的GridView

  在我們學習如何創(chuàng)建增強型排序用戶界面之前,先創(chuàng)建一個普通的列出所有產(chǎn)品GridView并且能夠排序.現(xiàn)在打PagingAndSorting文件夾下的CustomSortingUI.aspx,添加一個GridView,設(shè)置ID="ProductList",以一個ObjectDataSource為數(shù)據(jù)源,ObjectDataSource的數(shù)據(jù)從ProductsBLL類的GetProducts()取得。

  接下來設(shè)置GridView的列,包括ProductName, CategoryName, SupplierName, UnitPrice綁定列和Discontinued復(fù)選框列,再設(shè)置GridView允許排序。設(shè)置完這些以后你應(yīng)該可以在代碼編輯看到下面這些代碼:

asp:GridView ID="ProductList" runat="server" AllowSorting="True" AutoGenerateColumns="False"
 DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False">
 Columns>
  asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
  asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />
  asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True" SortExpression="SupplierName" />
  asp:BoundField DataField="UnitPrice" DataFormatString="{0:C}" HeaderText="Price"
   HtmlEncode="False" SortExpression="UnitPrice" />
  asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" />
 /Columns>
/asp:GridView>

asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetProducts" TypeName="ProductsBLL">/asp:ObjectDataSource>

這時你在瀏覽器中預(yù)覽你將看到類似圖2的界面,數(shù)據(jù)按類別的字母順序排序.

圖2:可排序GridView按Category按序

步驟2:如何添加分界行

  完成創(chuàng)建創(chuàng)建一個普通的,能夠排序的GridView后,就要在每一個類別的第一行之前添加分界行。怎么把這些分界行添加進GridView呢?一開始我們會想到遍歷GridView的所有行,遇到排序列中的值不同就插入分界行。按照這種想法我們自然倒想利用GridView的DataRowBound事件來實現(xiàn),DataRowBound事件我們已經(jīng)在基于數(shù)據(jù)的自定義格式化一章中講過,DataRowBound事件通常應(yīng)用于格式化數(shù)據(jù)行。但是,DataRowBound事件不能解決這個問題,因為不能用這個事件動態(tài)地添加行到GridView,GridView的Rows集合是只讀的.

  要添加行到GridView有以下3個方法:

  添加分界行到GridView綁定的數(shù)據(jù)源中
  GridView綁定數(shù)據(jù)后,添加額外的TableRow對象到GridView的控件集
  創(chuàng)建一個自定義服務(wù)器控件,擴展GridView控件,重寫它的方法以重新構(gòu)造GridView的結(jié)構(gòu)

  如果自定義排序用戶界面廣泛應(yīng)用多個頁面或多個網(wǎng)站,創(chuàng)建一個自定義服務(wù)器控件是最好的方法.但采用這種方法要寫太多的代碼并且要深入理解GridView控件的的內(nèi)部原理。因此,我們在這篇文章中不考慮使用這種方法。另外兩種不同的方法-添加分界行到GridView綁定的數(shù)據(jù)源中和在GridView綁定數(shù)據(jù)后操作它的子控件,值得討論.
添加分界行到綁定GridView的數(shù)據(jù)源中

  當GridView被綁定到數(shù)據(jù)源,GridView從數(shù)據(jù)源中的每一條記錄創(chuàng)建一條GridViewRow.因此我們可以在數(shù)據(jù)綁定(binding)之前添加一條"分界記錄",圖3描述了這個過程.

圖3:添加分界行到數(shù)據(jù)源原理圖

  "分界記錄"這個術(shù)語之所以加引號是因為實際沒有這條特殊的記錄,我們只是在數(shù)據(jù)源中添加一些標記行。打個比方,綁定ProductsDataTable對象到GridView,ProductsDataTable由ProductRow組成。我們可以標記一條記錄作為"分界記錄"并且設(shè)置CategoryID為-1(因為-1不存在普通記錄中).

使用這種方法要以下的步驟實現(xiàn):
1.得到綁定到GirdView的數(shù)據(jù)(一個ProductsDataTable對象)
2.基于GridView的SortExpression和SortDirection屬性排列數(shù)據(jù)
3.遍歷ProductsDataTable中的ProductsRows,尋找排序列的分界。
4.在每組的分界處插入"分界行"ProductsRow到DataTable中,CategoryID列值為-1(或其它可以標記"分界行"的值).
5.插入"分界行"后動態(tài)地綁定數(shù)據(jù)到GridView.

  完成以上5個步驟,還要在RowDataBound事件中判斷哪些行是"分界行"(CategoryID=-1的行),格式化"分界行"的顯示樣式.此外還要再做一些工作,在Sorting事件中保留SortExpressiont和SortDirection的值.
GridView綁定數(shù)據(jù)后,添加額外的TableRow對象到GridView的控件集

  相比在GridView綁定數(shù)據(jù)之前,在GridView綁定數(shù)據(jù)之后添加"分界行"更勝一籌.GridView是由一個Table構(gòu)成,一個Table由Rows集構(gòu)成,一個Row由Cells集構(gòu)成,這就是GridView的控件層次.GridView根部是Table對象,再由數(shù)據(jù)源的每條記錄生成GridViewRow (由TableRow派生出來),數(shù)據(jù)源的每一格的值又在GridViewRow生成TableCell.
我們可以利用GridView的控件層次構(gòu)成以后在每組之間的添加分界行.因為GridView的控件層次結(jié)構(gòu)是在頁面呈現(xiàn)的時候創(chuàng)建的,所以重寫Page類的Render方法,在需要的地方加上分界行,圖4描述了這個過程.

圖4:更改GridView控件層次結(jié)構(gòu)添加界行原理圖

這篇文章將用最后一個方法創(chuàng)建自定義排序用戶界面.

注意:這里使用的代碼是基于Teemu Keiski Blog中的Playing a Bit with GridView Sort Grouping一文.

步驟3:添加分界行到GridView的控件層次結(jié)構(gòu)中

我們要在GridView的控件層次已經(jīng)構(gòu)造完畢后,以及在頁面呈現(xiàn)之前添加分界行,必須在頁面生命周期的最后階段但又必須在GridView生成HTML語言之前進行,因此要重寫Page類的Render方法,比如在下面的代碼:

protected override void Render(HtmlTextWriter writer)
{
 // Add code to manipulate the GridView control hierarchy
 base.Render(writer);
}

  當頁面的原來的Render方法(base.Render(writer))被調(diào)用,頁面的每個控件將被顯示出來,產(chǎn)生出來的HTML標記基于控件層次.因此我們勢必要在base.Render(writer)被調(diào)用之前更改GridView的控件層次結(jié)構(gòu).要添加分界行必須確保用戶已經(jīng)排好序,但剛開始GridView是沒有按類別排好序的,不必要添加分界行.

  注意:如果要使GridView默認是按某一列排序的,就要在Page_Load中調(diào)用GridView的Sort方法,注意要在if(!IsPostBack)中.請參考分頁和排序數(shù)據(jù)(Paging and Sorting Report Data)一章獲得關(guān)Sort方法的更多相關(guān)知識.

假設(shè)已經(jīng)完成排序,下面要做的是判斷是按哪一列排序并尋找該列不同組的分界處,下面的代碼判斷是否排序,按哪一列排序:

protected override void Render(HtmlTextWriter writer)
{
 // Only add the sorting UI if the GridView is sorted
 if (!string.IsNullOrEmpty(ProductList.SortExpression))
 {
  // Determine the index and HeaderText of the column that 
  //the data is sorted by
  int sortColumnIndex = -1;
  string sortColumnHeaderText = string.Empty;
  for (int i = 0; i  ProductList.Columns.Count; i++)
  {
   if (ProductList.Columns[i].SortExpression.CompareTo(ProductList.SortExpression) == 0)
   {
    sortColumnIndex = i;
    sortColumnHeaderText = ProductList.Columns[i].HeaderText;
    break;
   }
  }

  // TODO: Scan the rows for differences in the sorted column's values
}

  假如GridView沒有排序,SortExpression就沒有設(shè)置值.我們要做的是對已經(jīng)排序的GridView添加分界行.完成排序后,下一步要判斷是按第幾列排序,遍歷每一列,比較SortExpression和哪一列的HeaderText相同,用兩個變量sortColumnIndext和sortColumnHeaderText分別保存該列的索引和標題.

  知道是按第幾列排序后,最后一步是添加分界行到GridView中,遍歷排序列的每一行,比較每上一行的值和它的當前行的值相不相同,不相同就要在中間插入分界行,代碼如下:

protected override void Render(HtmlTextWriter writer)
{
 // Only add the sorting UI if the GridView is sorted
 if (!string.IsNullOrEmpty(ProductList.SortExpression))
 {
  // ... Code for finding the sorted column index removed for brevity ...

  
  // Reference the Table the GridView has been rendered into
  Table gridTable = (Table)ProductList.Controls[0];

  // Enumerate each TableRow, adding a sorting UI header if
  // the sorted value has changed
  string lastValue = string.Empty;
  foreach (GridViewRow gvr in ProductList.Rows)
  {
   string currentValue = gvr.Cells[sortColumnIndex].Text;

   if (lastValue.CompareTo(currentValue) != 0)
   {
    // there's been a change in value in the sorted column
    int rowIndex = gridTable.Rows.GetRowIndex(gvr);

    // Add a new sort header row
    GridViewRow sortRow = new GridViewRow(rowIndex, rowIndex, DataControlRowType.DataRow, DataControlRowState.Normal);
    TableCell sortCell = new TableCell();
    sortCell.ColumnSpan = ProductList.Columns.Count;
    sortCell.Text = string.Format("{0}: {1}", sortColumnHeaderText, currentValue);
    sortCell.CssClass = "SortHeaderRowStyle";

    // Add sortCell to sortRow, and sortRow to gridTable
    sortRow.Cells.Add(sortCell);
    gridTable.Controls.AddAt(rowIndex, sortRow);
    
    // Update lastValue
    lastValue = currentValue;
   }
  }
 }

 base.Render(writer);
}

  首先獲得GridView控件層次結(jié)構(gòu)的根控件,一個Table,用gridTable表示.另外用字符串變量lastValue表示上一行的值,currentValue表示當前行的值.

  注意:我獲得通過單元格(cell)的Text屬性賦值給lastValue和currentValue,這只能應(yīng)用的綁定列(BoundFields),對于其它種類的列如模板列(TemplateField),復(fù)選框列(CheckBoxField)等等是不可行的,我將會在后面說明如何解決非綁定列的取值問題.

  比較lastValue和currentValue,如果不同就要添加分界行到GridView的控件層次結(jié)構(gòu)中.取得當前行的索引,創(chuàng)建一個GridViewRow對象(它由TableCell組成)插入到GridView的控件層次結(jié)構(gòu)中.另外我們要把分界行格式化成單獨的一個單元格,寬度與GridView相同,樣式與應(yīng)用SortHeaderRowStyle樣式(css文件在下面給出),顯示的文字是排序列名(如Category)和組名(如SeaFood),最后把currentValue賦值給lastValue.下面給出css代碼:

.SortHeaderRowStyle
{
 background-color: #c00;
 text-align: left;
 font-weight: bold;
 color: White;
}

  完成上面的代碼后,就可以對按綁定列排序后生成有分界行的排序界面(圖5是按supplier排序后給出的截圖).但是我現(xiàn)在還不能對其它種類的列(如模板列或者復(fù)選框列)生成用戶定義排序界面,如圖6所示(按Discontinue排序).

圖5:綁定列排序

圖6:按ChectBox列排序沒有出現(xiàn)分界行

  按復(fù)選框列排序沒有出現(xiàn)分界行是的原因是代碼通過獲取TableCell的Text屬性判斷按哪一列排序的,但復(fù)選框列TableCell的Text是空的,我們要從TableCell包含的控件取得CheckBox控件.遇到這種類型的列,要判斷CheckBox有沒有打勾,把currentValue = gvr.Cells[sortColumnIndex].Text替換成以下代碼:

string currentValue = string.Empty;
if (gvr.Cells[sortColumnIndex].Controls.Count > 0)
{
 if (gvr.Cells[sortColumnIndex].Controls[0] is CheckBox)
 {
  if (((CheckBox)gvr.Cells[sortColumnIndex].Controls[0]).Checked)
   currentValue = "Yes";
  else
   currentValue = "No";
 }

 // ... Add other checks here if using columns with other
 //  Web controls in them (Calendars, DropDownLists, etc.) ...
}
else
 currentValue = gvr.Cells[sortColumnIndex].Text;

  這段代碼判斷有沒有控件存在排序列的TableCell中,如果有并且第一個控件是CheckBox,按照CheckBox的Checked屬性給currentValue賦值為"Yes"或者"NO",要是綁定就把TableCell的Text屬性值賦給currentValue.同樣道理,模板列使用此方法.圖7是完善代碼按Discontinue排序后的截圖.

圖7:按CheckBox列排序出現(xiàn)分界行

  注意:如果數(shù)據(jù)庫中的CategoryID,SupplierID或UnitPrice 為NULL,那么在GridView將顯示為空字符串,這意味著分界行是這樣顯示"Category:",你可以設(shè)置綁定列的 NullDisplayText屬性更這種顯示樣式,或者在Render方法中利用currentValue設(shè)置分界行顯示的文字.

總結(jié)

  GridView沒有內(nèi)置自定義排序界面的功能,但我們通過一些代碼改變GridView的控件層次結(jié)構(gòu)就可以創(chuàng)建自定義排序界面,這篇文章講解如何添加分界行到可排序的GridView中,讓用戶容易的區(qū)分不同的組的分界,更多自定義排序界面例子請訪問Scott Guthrie的Blog中A Few ASP.NET 2.0 GridView Sorting Tips and Tricks一文.

祝你編程愉快!

作者簡介

  Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用 微軟Web技術(shù)。Scott是個獨立的技術(shù)咨詢顧問,培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作,24小時內(nèi)精通ASP.NET 2.0。他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://scottonwriting.net/與他聯(lián)系。

您可能感興趣的文章:
  • ASP.NET 跨頁面?zhèn)髦捣椒?/li>
  • ASP.NET 2.0中的數(shù)據(jù)操作之九:跨頁面的主/從報表
  • 在ASP.NET 2.0中操作數(shù)據(jù)之二十六:排序自定義分頁數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之二十八:GridView里的Button
  • 在ASP.NET 2.0中操作數(shù)據(jù)之二十九:用DataList和Repeater來顯示數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十:格式化DataList和Repeater的數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十一:使用DataList來一行顯示多條記錄
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十二:數(shù)據(jù)控件的嵌套
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十三:基于DataList和Repeater使用DropDownList過濾的主/從報表
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十四:基于DataList和Repeater跨頁面的主/從報表

標簽:臨夏 聊城 海西 慶陽 清遠 甘肅 中衛(wèi)

巨人網(wǎng)絡(luò)通訊聲明:本文標題《在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面》相關(guān)的同類信息!
  • 本頁收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91小视频免费观看| 精品一区二区三区在线观看 | 91丝袜呻吟高潮美腿白嫩在线观看| 99精品国产热久久91蜜凸| 3d动漫精品啪啪一区二区竹菊 | 中文字幕一区二区不卡| 韩国欧美国产一区| 久久久久国产一区二区三区四区 | 日韩高清电影一区| 日韩一二三四区| 国产一区二区毛片| 综合激情成人伊人| 欧美一区二区三区思思人| 国产一区啦啦啦在线观看| 亚洲视频一二区| 日韩亚洲国产中文字幕欧美| 成人精品国产一区二区4080| 亚洲综合精品久久| 国产亚洲欧美日韩日本| 91麻豆免费看| 狠狠色狠狠色综合系列| 亚洲欧美日韩国产一区二区三区| 51精品国自产在线| 91丝袜美腿高跟国产极品老师| 亚洲成av人在线观看| 国产亚洲成年网址在线观看| 色综合久久中文字幕综合网| 天天影视涩香欲综合网| 日韩美女精品在线| 久久综合九色综合97婷婷女人| 在线欧美日韩精品| 成人久久18免费网站麻豆| 久久精品国产亚洲5555| 偷拍亚洲欧洲综合| 亚洲一区欧美一区| 国产精品福利一区二区| 久久这里只有精品首页| 7777精品伊人久久久大香线蕉的| 成人h版在线观看| 成人福利电影精品一区二区在线观看| 另类欧美日韩国产在线| 青青青伊人色综合久久| 亚洲一区二区三区四区五区黄| 亚洲人吸女人奶水| 亚洲永久精品国产| 亚洲私人影院在线观看| 欧美高清在线精品一区| 国产日韩欧美a| 国产日韩欧美精品在线| 国产精品日韩成人| 亚洲激情男女视频| 午夜久久久久久| 久久精品国产久精国产爱| 久草热8精品视频在线观看| 久久99精品久久久| 成人一区二区三区| 国产在线播精品第三| 成人在线视频首页| 欧洲一区二区三区在线| 91精品一区二区三区在线观看| 精品欧美乱码久久久久久| 欧美国产激情二区三区| 一区二区免费在线| 激情综合色播五月| 成人av综合在线| 欧美一二三四区在线| 国产精品女同互慰在线看| 91精品国模一区二区三区| 成人av综合一区| 制服丝袜在线91| 国产午夜久久久久| 精品国产髙清在线看国产毛片| 国产精品天干天干在线综合| 午夜免费久久看| av午夜一区麻豆| 26uuu色噜噜精品一区| 一区二区三区色| 成人av网站免费| 久久久99精品免费观看不卡| 亚洲图片欧美视频| 91麻豆国产精品久久| 国产精品美女久久福利网站| 黄色日韩三级电影| 91精品福利在线一区二区三区| 亚洲色欲色欲www| 国产经典欧美精品| 日本一区二区成人| 国产成a人亚洲精品| 国产日韩精品一区二区浪潮av| 国产真实乱子伦精品视频| 欧美理论片在线| 美女视频一区二区| 91精品国产高清一区二区三区蜜臀| 亚洲成人av一区二区| 欧美日韩国产一区二区三区地区| 亚洲第一主播视频| 日韩欧美国产成人一区二区| 精品亚洲成a人| 国产精品国产成人国产三级| 91麻豆福利精品推荐| 丝瓜av网站精品一区二区| 91麻豆精品久久久久蜜臀| 国产精品自产自拍| 亚洲影视在线观看| 久久久国产午夜精品| 色噜噜狠狠色综合中国| 五月天激情综合| 久久婷婷久久一区二区三区| av电影一区二区| 极品尤物av久久免费看| 成人欧美一区二区三区| 欧美日韩国产a| 成人h动漫精品| 国内成人免费视频| 亚洲第一会所有码转帖| 亚洲视频一区二区免费在线观看| 日韩一区二区视频在线观看| 成人国产视频在线观看| 青青青爽久久午夜综合久久午夜| 久久精品在线观看| 91精品国产免费久久综合| 91蜜桃婷婷狠狠久久综合9色| 美国一区二区三区在线播放| 国产精品初高中害羞小美女文| 精品国产免费人成电影在线观看四季| 色播五月激情综合网| 国产白丝精品91爽爽久久| 国内一区二区在线| 国产综合一区二区| 国产曰批免费观看久久久| 久久精品av麻豆的观看方式| 琪琪一区二区三区| 91在线无精精品入口| 国模冰冰炮一区二区| 国产美女主播视频一区| 色综合久久天天综合网| 色综合久久久网| 捆绑紧缚一区二区三区视频| 美女视频黄免费的久久 | 国产综合色产在线精品| 久久99国产精品免费网站| 国产成人免费高清| 成人av网站免费| 欧美日韩精品专区| 日韩无一区二区| 自拍偷拍亚洲综合| 午夜精彩视频在线观看不卡| 韩国三级中文字幕hd久久精品| 丁香激情综合国产| 一本大道av一区二区在线播放| 9191久久久久久久久久久| 一区二区在线电影| 亚洲成人你懂的| 国产精品99久久久久| 在线成人小视频| 亚洲色欲色欲www| 老司机精品视频线观看86| 91九色02白丝porn| 久久久一区二区三区捆绑**| 欧美日韩视频不卡| 国产一区二区三区国产| 日韩福利视频导航| 亚洲精品一线二线三线无人区| 国产精品一区二区在线观看网站 | 极品少妇xxxx精品少妇| 免费成人美女在线观看| 99久久精品免费看| 亚洲精品一区二区三区影院| 亚洲成人综合视频| 韩国av一区二区三区四区| 成人av在线网站| 欧美va亚洲va在线观看蝴蝶网| 亚洲视频一区在线| 国内精品国产成人| 91精品国产综合久久福利| 在线看不卡av| 亚洲美女在线国产| yourporn久久国产精品| 国产亚洲va综合人人澡精品| 青娱乐精品视频| 欧美日韩国产精品成人| 日韩专区在线视频| 日本中文字幕不卡| 国产拍欧美日韩视频二区| 91激情五月电影| 亚洲国产美国国产综合一区二区| 欧洲国产伦久久久久久久| 精品毛片乱码1区2区3区| 国产精品一区二区三区99| 国产精品免费av| 欧美三级资源在线| a在线播放不卡| 五月天欧美精品| 亚洲精品成人悠悠色影视| 91麻豆精品国产| 成人午夜电影久久影院| 亚洲va欧美va人人爽| 精品久久一区二区| 91在线免费视频观看| 日韩福利视频网|