访问网格视图标头中的文本框值
本文关键字:文本 网格 视图 图标 访问 | 更新日期: 2023-09-27 18:34:16
我有一个包含库存数据的网格视图。我正在尝试将一个搜索函数放在一起,该函数将根据网格视图标头中每个控件的内容动态创建 SQL WHERE 子句。
网格视图中的每一列都是一个模板字段,控件添加在标题模板中。
这是我的代码。每当它运行时,控件(在本例中为 chkCaseSearch)为空,并且我收到"对象引用未设置为对象的实例"错误。
这是我的 C# 代码;它位于按钮单击事件中(按钮也是 gridview 标头中的一个控件)。每个控件都有一个等效的 if 语句,但为了简洁起见,我只显示一个。
谢谢!
TextBox tbManufacturerSearch = gvFirearms.FindControl("txtManufacturerSearch") as TextBox;
TextBox tbModelSearch = gvFirearms.FindControl("txtModelSearch") as TextBox;
TextBox tbSerialSearch = gvFirearms.FindControl("txtSerialSearch") as TextBox;
TextBox tbCaliberSearch = gvFirearms.FindControl("txtCaliberSearch") as TextBox;
DropDownList ddlTypeSearch = gvFirearms.FindControl("ddlTypeSearch") as DropDownList;
DropDownList ddlFormSearch = gvFirearms.FindControl("ddlFormSearch") as DropDownList;
CheckBox chkCaseSearch = gvFirearms.FindControl("chkCaseSearch") as CheckBox;
TextBox tbMagazineSearch = gvFirearms.FindControl("txtMagazineSearch") as TextBox;
TextBox tbLocationSearch = gvFirearms.FindControl("txtLocationSearch") as TextBox;
TextBox tbCommentsSearch = gvFirearms.FindControl("txtCommentsSearch") as TextBox;
if (chkCaseSearch.Checked)
{
strWhereClause = "[Case] = 1";
}
else if (!chkCaseSearch.Checked)
{
strWhereClause = "[Case] = 0";
}
看起来你必须像这样通过HeaderRow
访问它
CheckBox chkCaseSearch = gvFirearms.HeaderRow.FindControl("chkCaseSearch") as CheckBox;
如果在 Web 环境中,是否在 aspx 页中指定了 ID 标记?如果您使用的是 Winform 应用程序,则(例如)this.txtMagazineSearch
调用即可访问控件属性。
GridView 控件是数据集的呈现工具,因此你可以
- 动态重新生成数据集,并将其重新绑定到 GridView(如果要筛选信息)
- 遍历显示的项目,以证明与标准匹配的项目
在第一种情况下,我认为更相关,您可以在"刷新"按钮OnClickEvent中使用如下所示的内容:
protected void cmdRefresh_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(connectionManager.getConnectionString("myDB"));
SqlCommand cmd = new SqlCommand("myQry", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader rdr;
cmd.Parameters.Add(new SqlParameter("@Par1", chkCaseSearch.Checked));
try
{
conn.Open();
rdr = cmd.ExecuteReader();
}
catch (Exception)
{
throw;
}
grdView1.DataSource = rdr;
grdView1.DataBind();
}
可以将存储过程定义替换为包含要启动的 SQL 命令的文本。
希望这有帮助。
保罗
我需要特别告诉网格视图我正在寻找的控件在标题行中。
TextBox tbManufacturerSearch = gvFirearms.HeaderRow.FindControl("txtManufacturerSearch") as TextBox;
即使 gridview 的每次迭代只有一个具有该名称的控件,仍然需要告知它具体在哪一行中。
谢谢!