【问题标题】:Custom multiselect gridview breaks on Row Update commands行更新命令上的自定义多选网格视图中断
【发布时间】:2009-05-29 16:54:25
【问题描述】:

我有一个扩展的 GridView 类,GridViewEx,它继承自基本的 ASP.NET gridview。我重写了 CreateColumns 方法来拦截列集合并注入我自己的列,其中包含一个修改过的 CheckBoxField。

(旁注:我尝试寻找一些其他方法来存储和更新哪些行被选中,并仅使用复选框作为显示机制,但最终复选框是处理所有内容的最简单方法。)

CheckBoxField 在创建时将其 ReadOnly 属性设置为 true(并且在将其添加到列集合时保持为 true),这应防止它作为针对 gridview 数据源的更新请求的参数传递。

正如您可能推断的那样,这不会发生。当我尝试执行行编辑和更新时,我收到一个“参数过多”警告,其中包含一个没有名称的参数。如果我关闭多选功能,它就会消失。所以我知道我的复选框字段没有被视为只读字段。但我不知道如何解决它!

关于我需要在何处、何时或如何设置此字段以使其不会作为参数自动传递给我的更新的任何想法?

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    好的,想通了。

    我还有一个自定义 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;
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多