首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从代码后面添加Gridview列的问题

从代码后面添加Gridview列的问题
EN

Stack Overflow用户
提问于 2013-08-30 05:44:11
回答 5查看 1.9K关注 0票数 3

我有一个网格视图,它显示了关于某些文件的一些细节。它有5个列,包括一个包含复选框的模板字段。

在后面的代码OnInit中,我添加了许多列,以获取其他信息,这些信息可能需要,也可能不需要,具体取决于页面。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 for (int i = 0; i < models.Length && i < 3; i++)
            {
                var model = models[i];

                //Add gridview rows
                BoundField bf = new BoundField();
                bf.DataField = "Attribute" + i;
                bf.HeaderText = model.AttributeName;
                bf.Visible = true;

                gvFiles.Columns.Insert(6 + i, bf);

            }

这个很好,我得到了列。在OnLoad事件中,我将某些数据数据库到网格视图,这同样有效。

当回发发生时,问题就会出现。每当页面创建回发时,它都会执行OnInit,然后使用以下(“on page”)错误消息崩溃:

出现错误是因为无法找到id 'ctl00$MainContent$gvFiles$ctl02$ctl00‘的控件,或者在回发后将不同的控件分配给相同的ID。如果没有分配ID,则显式设置引发回发事件的控件的ID属性,以避免此错误。

我识别了给出问题的控件为TemplateField中的复选框,并给了它一个id。但是,现在在回发时会发生以下情况:

  1. 没有出现TemplateFieldss中的复选框
  2. 其中一个列是一个ImageField,它失去了“控制样式的宽度/高度”参数,我得到了大量的图像。

这个问题只发生在回发上,删除按语法方式添加列的代码可以使一切正常工作。

我怎么才能让这个起作用?

EN

回答 5

Stack Overflow用户

发布于 2013-12-10 05:32:58

我只需告诉单行解决方案

在Gridview绑定方法中,需要在页面加载事件中添加!IsPostback

解释:

请参阅下面的代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PageLoad()
{
BindGridview();
}

Public void BindGridview()
{
//Binding codes and add extra column codes
for (int i = 0; i < models.Length && i < 3; i++)
            {
                var model = models[i];

                //Add gridview rows
                BoundField bf = new BoundField();
                bf.DataField = "Attribute" + i;
                bf.HeaderText = model.AttributeName;
                bf.Visible = true;

                gvFiles.Columns.Insert(6 + i, bf);

            }
}

您可以在页面加载中调用"BindGridview()“方法,无论何时加载.The,都会创建相同的列字段。

您需要在第一次页面加载时调用"BindGridview()“方法-- only.So --您确实需要!IsPostBack

请参阅下面的代码\\,或者在Page Init事件中调用它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PageLoad()
{
if(!IsPostBack)
{
BindGridview();
}
}

现在,BindGridview();方法称为第一次加载页面。

关于"IsPosteBack“属性的更多详细信息

票数 2
EN

Stack Overflow用户

发布于 2013-12-10 06:04:32

您需要在回发时重新创建一个动态添加的控件。

MSDN建议在PreInit事件中创建控件。

在开始阶段完成和初始化阶段开始之前引发。使用此事件进行下列操作:

  • 检查IsPostBack属性以确定这是否是第一次处理该页。此时还设置了IsCallback和IsCrossPagePostBack属性。
  • 创建或重新创建动态控件。
  • 动态设置母版页。
  • 动态设置主题属性。
  • 读取或设置配置文件属性值。
票数 2
EN

Stack Overflow用户

发布于 2013-12-11 06:04:37

如果oninit事件中有if(!ispostback),那么删除它。动态控件只需要在Oninit事件的每次回发时创建。

如果未重新创建控件,则无法找到该控件,类似于在您的情况下正在发生的情况。如果控件是在PageLoad上创建的,那么客户端的值将无法访问,您将得到一个不同的错误。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18534433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文