有这样的一个问题,请大家解决下。
我在GridView中的RowDataBound中,通过目录ID或取目录名称,而目录名称在另一张表中。在GridView中不是显示目录ID而是显示目录名称。所以会有下面的做法(该列是个模板列)。
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //由目录ID获取目录名
            Label lbl = new Label();
            string catalogID= ((DataRowView)(e.Row.DataItem)).Row.ItemArray[1].ToString();
            CatalogService catalogService = new CatalogService();
            //把获取的目录名称赋值给lbl
            lbl.Text = catalogService.GetCatalogByCID(catalogID).CatalogName;
            e.Row.Cells[3].Controls.Add(lbl);
        }
}在GridView之外有个个 全选CheckBox  其ID为 allChoose我在其CheckChange方法中写了如下代码
其目的是选中GridView中当前页中的所有行
protected void allChoose_CheckedChanged(object sender, EventArgs e)

     for (int i = 0; i < this.GridView1.Rows.Count; i++)
        {
            CheckBox chox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox3");
            if (allChoose.Checked == true)
            {
                chox.Checked = true;
            }
            else
            {
                chox.Checked = false;
            }
        }
    }
现在的问题是我点了全选后,虽然可以全选,但已经绑定好目录名没有绑定上去,为空白!但其他的一般绑定列可以显示绑定数据。就那一列不行。
我调试了下,因为是GridView1_RowDataBound(object sender, GridViewRowEventArgs e)没执行。
但不知道怎么解决?

解决方案 »

  1.   

    在 GridView 控件中将数据行绑定到数据时发生
    你有数据绑定 
    这个方法肯定会执行啊~~
      

  2.   

    aspx中的GridView1有这句话没有?
    GridOnRowDataBound="GridView1_RowDataBound"
      

  3.   


    1、在 allChoose_CheckedChanged 加数据绑定函数2、 //由目录ID获取目录名 
                Label lbl = new Label();    把label换成 Textbox(有状态保存机制的控件)可以不?
      

  4.   

    有GridView绑定方法BindInfo()
    但是用这个方法在allChoose_CheckedChanged(object sender, EventArgs e) 
    中的最后加上这个方法BindInfo()后,是可以执行GridView1_RowDataBound
    但全选就失效了,GridView中的CheckBox3就不能选中了
    这个才是我真正郁闷的地方啊!期待解决这个矛盾的地方。
      

  5.   

    另外Sql语句中为什么不把目录名也查询出来?
      

  6.   


    这样改了之后, 把  CheckBox chox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox3"); 
                if (allChoose.Checked == true) 
                { 
                    chox.Checked = true; 
                } 
                else 
                { 
                    chox.Checked = false; 
                } 放到rowDataBound里,代码要稍稍变变
      

  7.   

    像这种情况,我真的应该先在数据先把这个数据字段查出来,还是像我这样在RowDataBound时间里这样写啊!
    想知道大家平时是怎样做的!
    大家发表自己的一下看法啊!小弟现在这里先谢谢大家了。
      

  8.   

    BindInfo() 加在 allChoose_CheckedChanged 这个方法的开头(不要加在最后)一般的做法是在模版列里写好Label控件,在RowDataBound事件里用e.Row.FindControl去找到这个label然后赋值,这样避免动态创建label控件,在postback回发时就能象其它列一样保持原来的值。另外也可以直接在模版列里写绑定表达式:
    <asp:TemplateField>
    <ItemTemplate>
    <%# new CatalogService().GetCatalogByCID(((System.Data.DataRowView)(Container.DataItem)).Row.ItemArray[1].ToString()).CatalogName %>
    </ItemTemplate>
    </asp:TemplateField>
    如果目录id的字段名称是“CatalogID”,则取catalogID的部分还可以简化成Eval("CatalogID") as string
      

  9.   

    你可以把你全选的方法allChoose_CheckedChanged(object sender, EventArgs e)
    里的内容放到GridView1_RowDataBound方法里啊,当你全选时在绑定、、、
      

  10.   

    谢谢大家的发言啊!jshi123的两个解决办法觉得挺不错的!