代码之家  ›  专栏  ›  技术社区  ›  CodexArcanum

行更新命令上的自定义多选网格视图分隔符

  •  0
  • CodexArcanum  · 技术社区  · 15 年前

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

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

    checkboxField的readOnly属性在创建时设置为true(在将其添加到columns集合时保持为true),这将防止它作为针对GridView数据源的更新请求的参数传递。

    正如你所推断的,那是不可能的。当我尝试执行行编辑和更新时,会收到一条“参数太多”警告,其中只有一个参数没有名称。如果我关闭多重选择功能,它就会消失。所以我知道我的checkboxfield没有被当作只读字段。但我不知道怎么修!

    我需要在何处、何时或如何设置此字段,以便它不会自动作为参数传递给我的更新吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   CodexArcanum    15 年前

    好的,明白了。

    我还有一个自定义的checkboxfield,它覆盖InitializeDatacell并在我自己的复选框中写入。我需要添加一个额外的检查,以便它在编辑期间禁用字段(如果设置了readonly)。这似乎解决了这个问题。希望这能帮助其他任何正在进行自定义网格视图编辑的人。

        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;
                }
            }
        }