您的位置:首页 > 其它

GridView中列的绑定与显示问题

2009-06-22 15:34 218 查看
不知道大家有没有遇到过这种情况: 当GridView中既有在页面绑定的列又有动态在代码页绑定的列,一但发生PostBack 就会出现列重复的现象。如下:

a.aspx页面中的代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
ondatabound="GridView1_DataBound" onrowdatabound="GridView1_RowDataBound">
<Columns >
<asp:TemplateField >
<HeaderTemplate>显示</HeaderTemplate>
<ItemTemplate >
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack ="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<HeaderTemplate>锁定</HeaderTemplate>
<ItemTemplate >
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack ="true" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


a.aspx.cs中的代码:

public partial class test_test16_call_procedure : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

boundColumToGrid();
}

private int boundColumToGrid()
{
Titles_names tn = new Titles_names("FMTCS10001", 1);
GridView1.DataSource = tn.Dds;

BoundField bc1 = new BoundField();
BoundField bc2 = new BoundField();
BoundField bc3 = new BoundField();
BoundField bc4 = new BoundField();

bc1.HeaderText = "显示名称";
bc1.DataField = "clm_cap";
GridView1.Columns.Add(bc1);

bc2.HeaderText = "宽度";
bc2.DataField = "clm_width";
GridView1.Columns.Add(bc2);

GridView1.DataBind();
return 1;
}
}


页面中绑定的是两列CheckBox,后台则是两列数据。运行后的效果:



一切正常。但是当你点击一个复选框后:



看见了吧,其它列出现了重复,而CheckBox列却没有。

原因就在于写在页面上的两列CheckBox 在每次页面unload时去掉,在加载时自动加入;而写在后台代码中的列则会一直存在。

估计你会想:在每次页面load时清空不就行了么。所以我们在代码中加入一段代码:

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
GridView1.Columns.Clear();
}
boundColumToGrid();
}


效果估计你也猜出来了:



是不重复了,但PostBack后那两列没了。那两列是在Page_Load之前绑定上去的,所以一Clear()就没了。

我没想到好的解决办法,只能用最笨的办法来解决了:

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
removeColum();
}
boundColumToGrid();
}

private void removeColum()
{
GridView1.Columns.RemoveAt(2);
GridView1.Columns.RemoveAt(2);
}


每次Page_load的时候把我们之前在后台绑的列给去掉。(就这样问题还不算完!)

所以看来数据的绑定要么全放在页面要么全放在后台代码,要不然问题多多。

不知道各位是怎么处理的,静等高见。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: