GridView搜索控件

分享于 

10分钟阅读

Web开发

  繁體

Sample Image - screen0.jpg

介绍

GridViewSearch 控件是 ASP.NET 用户控件,提供搜索/筛选功能,可以用于筛选与 GridView 控件绑定的DataTable/DataSource。 控件中有两种搜索模式: BasicAdvanced 两种模式都构造了一个基于 火警的警铃在哪里? 可以将-clause筛选器设置为属性的DataViewRowFilter

Basic 搜索模式主要适用于 varchar/string字段,而 Advanced 模式可以用于布尔。整数。字符串和日期字段。 Advanced 模式也可以将字段与 -type或者 或者 结果筛选器字符串中的-type子句。

使用 GridViewSearch UserControl

要在web项目中使用 GridViewSearch UserControl,请将控件( HTML和代码文件)的副本放到你的网络项目中,并更改该控件的名称/类以满足你的需要。 为了方便编码,在代码源中的GridViewSearch 控件的列和处理被有意地留给编码器,而不用从头开始。 列和控件演示了不同字段类型和控件的处理,大多数字段和控件在处理数据库表和存储过程时很常见。

在代码文件中,用你自己的业务/数据层来绑定 GridViewSearch 字段。 类中的许多支持函数可以与任何业务/数据对象一起使用,只需修改/删除一些代码。

如果要捕获由用户控件引发的Search 事件,请向包含 GridView 控件的类/控件添加处理程序,然后很可能将搜索筛选器应用于 RowFilter 和绑定的GridView 数据源。

如果要从其他UserControl或者 Page 引用控件,请不要忘记调用类函数的Initialize() 来设置控件的属性。

注意 : 这个控件不是单独的stand UserControl UserControl在与另一个控件一起工作时,它的意图是用作几乎一个"初学者工具包"。 增强你需要使用的部分,并丢弃不需要的部分。

在运行示例演示之前,请在Northwind数据库中运行 Orders_SPs.sql。

下面是 GridViewSearch 示例中的几个不同视图的演示:

GridViewSearch控件的基本视图

Basic Search View

GridViewSearch控件的高级视图

Advanced Search View

基本搜索的结果

Basic Search View Results

高级搜索的结果

Advanced Search View Results

GridViewSearch控件的工作原理

GridViewSearch 控件由两个面板( BasicAdvanced ) 组成,每个面板包含用于生成筛选字符串的控件。 基本的搜索面板有一个 TextBox 和一个搜索 LinkButton。 高级搜索相似,除了输入搜索字符串的TextBoxDetailsView 控件用于显示生成筛选字符串的所有列和字段。 这两个视图都有一个取消 LinkButton,它只在生成筛选器字符串后显示。

生成基本搜索或者高级搜索筛选器字符串后,将从控件引发 Search 事件并传递新生成的筛选器字符串。 这里事件需要被父控件捕获,然后筛选字符串可以应用于 RowFilterGridView 数据源的。 单击"取消" LinkButton 时,搜索过滤器字符串被清除,然后将 Search 事件再次提交给父控件( 有效地清除数据源的RowFilter )。

默认情况下隐藏高级搜索面板,当用户单击高级搜索 LinkButton 时,将隐藏基本搜索面板。 用户可以通过单击"退出高级搜索"链接按钮返回到基本搜索视图。

下面是在业务对象和 GridView 控件和 Search 控件之间读/写数据时使用的一些更有用的代码 Fragment。

publicvoid Initialize()
{
 BindDetailView();
 ShowAdvancedSearch(false);
}protectedvoid BindDetailView()
{
 CIF.Business.Northwind.Orders _Orders =
 new CIF.Business.Northwind.Orders();
 DataTable dtOrders = _Orders.GetDataTable("OrderID", "0");
 dvOrders.DataSource = dtOrders;
 dvOrders.DataBind();
}protectedvoid ShowAdvancedSearch(bool bShow)
{
 pnlAdvancedSearch.Visible = bShow;
 pnlBasicSearch.Visible =!bShow;
}protectedstring GetBasicSearchString()
{
 StringBuilder sb = new StringBuilder(string.Empty);
 string sBasicSearchText = txtBasicSearch.Text.Trim();
 if (sBasicSearchText == string.Empty)
 returnstring.Empty;
 string sCustomerID = GetSearchFormattedFieldString("CustomerID",
 sBasicSearchText, string.Empty, true);
 sb.Append(sCustomerID);
 sb.Append(" OR");
 string sShipName = GetSearchFormattedFieldString("ShipName",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipName);
 sb.Append(" OR");
 string sShipAddress = GetSearchFormattedFieldString("ShipAddress",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipAddress);
 sb.Append(" OR");
 string sShipCity = GetSearchFormattedFieldString("ShipCity",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipCity);
 sb.Append(" OR");
 string sShipRegion = GetSearchFormattedFieldString("ShipRegion",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipRegion);
 sb.Append(" OR");
 string sShipPostalCode =
 GetSearchFormattedFieldString("ShipPostalCode",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipPostalCode);
 sb.Append(" OR");
 string sShipCountry = GetSearchFormattedFieldString("ShipCountry",
 sBasicSearchText, string.Empty, true);
 sb.Append(sShipCountry);
 string sSearch = sb.ToString();
 return sSearch;
}protectedstring GetAdvancedSearchString()
{
 StringBuilder sb = new StringBuilder(string.Empty);
 string sLastRowOperator = string.Empty;
 string sOrderID = GetSearchFormattedFieldString("OrderID",
 ((TextBox)dvOrders.FindControl("txtOrderID")).Text,
 ((DropDownList)dvOrders.FindControl(
 "ddlOrderIDOperator")).SelectedValue);
 sOrderID = sOrderID.Trim();
 if (sOrderID!= string.Empty)
 {
 if (sb.ToString().Trim()!= string.Empty)
 sb.Append("" + sLastRowOperator + "");
 sb.Append(sOrderID);
 sLastRowOperator = ((DropDownList)dvOrders.FindControl(
 "ddlOrderIDRowOperator")).SelectedValue;
 }
. . .
. . .
. . .
 string sShipCountry = GetSearchFormattedFieldString("ShipCountry",
 ((TextBox)dvOrders.FindControl("txtShipCountry")).Text,
 ((DropDownList)dvOrders.FindControl(
 "ddlShipCountryOperator")).SelectedValue);
 sShipCountry = sShipCountry.Trim();
 if (sShipCountry!= string.Empty)
 {
 if (sb.ToString().Trim()!= string.Empty)
 sb.Append("" + sLastRowOperator + "");
 sb.Append(sShipCountry);
 }
 string sSearch = sb.ToString();
 return sSearch;
}protectedstring GetSearchFormattedFieldString(string sfield,
 stringvalue, string soperator)
{
 return GetSearchFormattedFieldString(sfield, value, soperator, false);
}protectedstring GetSearchFormattedFieldString(string sfield,
 stringvalue, string soperator, bool bForceStringType)
{
 if (value.Trim() == string.Empty)
 returnstring.Empty;
 string _newValue = value.Trim();
 string _invalidChars = "`~!@#$%^&()-_=+[{]}|;:<,>./?"";
 string _operator = "=";
 if(soperator!= string.Empty)
 _operator = soperator;
 if (MSCD.Utilities.Validation.IsDateTime(_newValue) == false)
 {
 for (int i = 0; i < _invalidChars.Length; i++)
 {
 _newValue = _newValue.Replace(_invalidChars.Substring(i, 1),
 string.Empty);
 }
 _newValue = _newValue.Replace('*', '%');
 _newValue = _newValue.Replace("'", "''");
 }
 if (bForceStringType == false)
 {
 if (MSCD.Utilities.Validation.IsDateTime(_newValue) == true)
 {
 DateTime dtValue = DateTime.Parse(_newValue);
 _newValue = sfield + "" + _operator + " #" +
 dtValue.ToShortDateString() + "#";
 }
 elseif (MSCD.Utilities.Validation.IsNumeric(_newValue) == true)
 {
 _newValue = sfield + "" + _operator + "" + _newValue;
 }
 else {
 if(_newValue.IndexOf("%") > -1)
 _newValue = sfield + " LIKE '" + _newValue + "'";
 else _newValue = sfield + "" + _operator + " '" +
 _newValue + "'";
 }
 }
 else {
 if(_newValue.IndexOf("%") > -1)
 _newValue = sfield + " LIKE '" + _newValue + "'";
 else _newValue = sfield + "" + _operator + " '" + _newValue + "'";
 }
 return _newValue;
}

结束语

I you article article article article article saved saved在使用不同类型的表和数据集quickly快速获取 Search/GridView -filtering控件,并运行 running。 enjoy!


控制  GRID  搜索  Gridview  
相关文章