protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Session["table"] = MakeTable(); GridView1.DataSource = (DataTable)Session["table"]; GridView1.DataBind(); } } public DataTable MakeTable() { //生成datatable DataTable dt = new DataTable("table1"); DataColumn myDataColumn; DataRow myDataRow; myDataColumn = new DataColumn(); myDataColumn.ColumnName = "id"; myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ReadOnly = true; myDataColumn.Unique = true; dt.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.ColumnName = "商品名称"; myDataColumn.DataType = System.Type.GetType("System.String"); dt.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.ColumnName = "商品价格"; myDataColumn.DataType = System.Type.GetType("System.Decimal"); dt.Columns.Add(myDataColumn); //add rows myDataRow = dt.NewRow(); myDataRow["id"] = 1; myDataRow["商品名称"] = "aaa"; myDataRow["商品价格"] = 100; dt.Rows.Add(myDataRow); myDataRow = dt.NewRow(); myDataRow["id"] = 2; myDataRow["商品名称"] = "bbb"; myDataRow["商品价格"] = 200; dt.Rows.Add(myDataRow); myDataRow = dt.NewRow(); myDataRow["id"] = 3; myDataRow["商品名称"] = "ccc"; myDataRow["商品价格"] = 300; dt.Rows.Add(myDataRow); return dt; } /// <summary> /// 如果要对数据库中的表做查询或者要排序.不用再直接从数据库表中做查询. /// 只需要把对应的表的所有字段取出来放到DataSet中的datatable中.然后创建对应的dataview /// 这样就可以对dataview进行查询.或者排序 /// 下面的例子是把根据一个datatable创建dataview.然后对其模糊查询.把dataview绑定到gridview上显示. /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn1_Click(object sender, EventArgs e) { DataTable dt = (DataTable)Session["table"]; //create dataview for dt DataView dv = new DataView(dt); dv.RowFilter = "商品名称 like '%" + txt1.Text.Trim() + "%'"; //这里只要写where就好了 GridView1.DataSource = dv; GridView1.DataBind(); } /// <summary> /// 下面的例子是把根据一个datatable创建dataview.对其价格范围的查询.把dataview绑定到gridview上显示. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnPriceRange_Click(object sender, EventArgs e) { DataTable dt = (DataTable)Session["table"]; DataView dv2 = new DataView(dt); //这里RowFilter的条件写法不支持between and的方法的 string sqlsele = string.Format("商品价格 >{0} and 商品价格 < {1}", txt2.Text, txt3.Text); dv2.RowFilter = sqlsele; GridView1.DataSource = dv2; GridView1.DataBind(); } public static bool flagsort = true; /// <summary> /// ;利用DataView 根据商品价格反序排列 /// </summary> protected void btnSort_Click(object sender, EventArgs e) { DataTable dt = (DataTable)Session["table"]; DataView dv3 = new DataView(dt); if (flagsort) { dv3.Sort = "商品价格 desc"; flagsort = false; } else { dv3.Sort = "商品价格 asc"; flagsort = true; } GridView1.DataSource = dv3; GridView1.DataBind(); } /// <summary> /// 用DataView 的 find/findrows /// </summary> protected void btnFindRows_click(object sender, EventArgs e) { DataTable dt = (DataTable)Session["table"]; DataView dv = new DataView(dt); dv.Sort = "商品名称 asc"; //要使用find方法.就要对视图先排序 string findrow = txt4.Text.Trim(); int rowIndex = dv.Find(findrow); //查找名字所在的字段 System.Windows.Forms.MessageBox.Show(rowIndex.ToString()); DataRowView[] drv = dv.FindRows("byFind: " + findrow); System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (var item in drv) //因为所查询的名字可能有多行 { sb.Append(item["id"]); } System.Windows.Forms.MessageBox.Show("byFindRows: " + sb.ToString()); //可以找到名字对应的id号 } }
======================================
<div> <asp:GridView ID="GridView1" runat="server" Height="172px" Width="492px"> </asp:GridView> <br /> 模糊查询产品名: <asp:TextBox ID="txt1" runat="server"></asp:TextBox> <asp:Button ID="btn1" runat="server" Text="search" OnClick="btn1_Click" /> <asp:Button ID="btnSort" runat="server" Text="by商品价格sort ascORdesc" OnClick="btnSort_Click" /> </div> <p> 查商品价格: <asp:TextBox ID="txt2" runat="server"></asp:TextBox> --- <asp:TextBox ID="txt3" runat="server"></asp:TextBox> <asp:Button ID="btn2" runat="server" Text="search price range" OnClick="btnPriceRange_Click" /> </p> <p> dataView find/findRows:<asp:TextBox ID="txt4" runat="server"></asp:TextBox> <asp:Button ID="btnFindRows" runat="server" Text="User DataView find" OnClick="btnFindRows_click" /> </p>