我有一个包含库存数据的gridview。我正在尝试组合一个搜索函数,它将根据gridview标头中每个控件的内容动态创建一个SQL WHERE子句。
gridview中的每一列都是一个模板字段,控件添加在页眉模板中。
这是我的代码。每当它运行时,控件(在本例中为chkCaseSearch)为null,并且我将"对象引用设置为未设置为对象的实例"错误。
这是我的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";
}
答案 0 :(得分:1)
看起来你必须像HeaderRow那样访问它
CheckBox chkCaseSearch = gvFirearms.HeaderRow.FindControl(" chkCaseSearch")作为CheckBox;
答案 1 :(得分:0)
如果您在Web环境中,是否在aspx页面中指定了ID标记?
如果您使用的是Winform应用程序,则(例如)this.txtMagazineSearch
调用就足以访问控件属性。
答案 2 :(得分:0)
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命令的文本替换存储过程定义。
希望得到这个帮助。
保
答案 3 :(得分:0)
我需要专门告诉gridview我正在寻找的控件是在标题行中。
TextBox tbManufacturerSearch = gvFirearms.HeaderRow.FindControl("txtManufacturerSearch") as TextBox;
即使gridview的每次迭代都只有一个带有该名称的控件,仍然需要告诉它具体是哪一行。
谢谢!