我有一个扩展的GridView类GridViewEx,它继承自ASP.NET的基本gridview。我重写CreateColumns方法来拦截列集合并注入我自己的列,其中包含一个修改过的CheckBoxField。
(旁注:我尝试了一些其他方法来存储和更新选择了哪些行,只使用复选框作为显示机制,但最终复选框是处理所有内容的最简单方法。)
CheckBoxField在创建时将其ReadOnly属性设置为true(并且在将其添加到columns集合时保持为true),这应该防止它作为针对gridview数据源的Update请求的参数传递。
正如你可能推断的那样,这种情况并没有发生。当我尝试执行行编辑和更新时,我得到一个“Too many parameters”警告,其中包含一个没有名称的参数。如果我关闭多重选择功能,这就消失了。所以我知道我的checkboxfield不被视为Readonly字段。但我不知道如何解决它!
关于我需要设置此字段的位置,时间或方式的任何想法,以便它不会作为参数自动传递给我的更新?
答案 0 :(得分:0)
好的,想通了。
我还有一个自定义CheckBoxField,它覆盖了InitializeDataCell并在我自己的复选框中写入。如果设置了Readonly,我需要添加一个额外的检查,以便在编辑期间禁用该字段。这似乎解决了这个问题。希望这可以帮助其他人进行自定义GridView编辑。
internal class InputCheckBoxField : CheckBoxField
{
//... Some boilerplate for ID and other properties here
protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
{
base.InitializeDataCell(cell, rowState);
if (cell.Controls.Count == 0)
{
CheckBox chk = new CheckBox();
chk.ID = CheckBoxID;
chk.AutoPostBack = true;
cell.Controls.Add(chk);
//This was the needed check
if(ReadOnly && rowState == DataControlRowState.Edit)
chk.Enabled = false;
}
}
}