有这样的一个问题,请大家解决下。
我在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)没执行。
但不知道怎么解决?
我在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)没执行。
但不知道怎么解决?
你有数据绑定
这个方法肯定会执行啊~~
GridOnRowDataBound="GridView1_RowDataBound"
1、在 allChoose_CheckedChanged 加数据绑定函数2、 //由目录ID获取目录名
Label lbl = new Label(); 把label换成 Textbox(有状态保存机制的控件)可以不?
但是用这个方法在allChoose_CheckedChanged(object sender, EventArgs e)
中的最后加上这个方法BindInfo()后,是可以执行GridView1_RowDataBound
但全选就失效了,GridView中的CheckBox3就不能选中了
这个才是我真正郁闷的地方啊!期待解决这个矛盾的地方。
这样改了之后, 把 CheckBox chox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox3");
if (allChoose.Checked == true)
{
chox.Checked = true;
}
else
{
chox.Checked = false;
} 放到rowDataBound里,代码要稍稍变变
想知道大家平时是怎样做的!
大家发表自己的一下看法啊!小弟现在这里先谢谢大家了。
<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
里的内容放到GridView1_RowDataBound方法里啊,当你全选时在绑定、、、