访问gridview标头中的文本框值

时间:2016-02-11 14:51:17

标签: c# asp.net gridview

我有一个包含库存数据的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";
}

4 个答案:

答案 0 :(得分:1)

看起来你必须像HeaderRow那样访问它

CheckBox chkCaseSearch = gvFirearms.HeaderRow.FindControl(" chkCaseSearch")作为CheckBox;

答案 1 :(得分:0)

如果您在Web环境中,是否在aspx页面中指定了ID标记? 如果您使用的是Winform应用程序,则(例如)this.txtMagazineSearch调用就足以访问控件属性。

答案 2 :(得分:0)

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命令的文本替换存储过程定义。

希望得到这个帮助。

答案 3 :(得分:0)

我需要专门告诉gridview我正在寻找的控件是在标题行中。

TextBox tbManufacturerSearch = gvFirearms.HeaderRow.FindControl("txtManufacturerSearch") as TextBox;

即使gridview的每次迭代都只有一个带有该名称的控件,仍然需要告诉它具体是哪一行。

谢谢!

相关问题