GridView1.Cells[5]中 使用 CommandField 的编辑和删除命令,
问题1:大多情况下,GridView1.Cells[5].Controls[0]是编辑 AND GridView1.Cells[5].Controls[2]是删除;而有时,
GridView1.Cells[5].Controls[0]是LiteralControl,内容是"\r\n";GridView1.Cells[5].Controls[1]是编辑 AND GridView1.Cells[5].Controls[3]是删除,不知是怎么回事;问题2:
代码:
if (!IsPostback){

foreach (GridViewRow gr in GridView1.Rows)
{
  //权限控制
  gr.Cells[5].Controls[0].Visible =true;    //编辑可见
  gr.Cells[5].Controls[2].Visible = false;  //删除不可见
}

}
装载页面时呈现正确;当点击“编辑”后,所有“删除”按钮全部显示了;并且,点击“取消”后,页面呈现中“删除”按钮全部可见了;问题3:对于每行中的编辑和删除的可视该怎么动态控制。

解决方案 »

  1.   

    gr.Cells[5].Controls[0]
    ==
    等楼主学会用TemplateField,上面的问题就都可以解决了,用Cells[index].Controls[0]来定位控件可以说是比较初级的做法比如你的问题3
    问题3:对于每行中的编辑和删除的可视该怎么动态控制。
    ==
    <asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnDelete" runat="server" Text="删除" Visible='<%# IsAdmin %>' CommandName="Delete" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>在后台代码中给一个 IsAdmin属性来控制即可
      

  2.   

    GridView1.Cells[5].Controls[0]是LiteralControl
    这个应该是在客户端显示时控制显示格式用的,控制按钮的显示与否将visialbe绑定到bool字段就行了,如amandag 所说
      

  3.   

    使用模版列那肯定可以解决问题的。
    背景:张三写的代码,加载李四写的权限模块的时候产生的上述问题。作为项目的管理者,解决不了这个问题,可以要求张三将那些命令全部转化为模版列;但我还是想知道,一样的代码(张三说是复制的)]Controls的表现为什么会不同呢。
      

  4.   

    用Controls[0]定位控件是非常不严谨的,如果你的单元格里有一个其他的html标记,那么你代码的可能就要改为Controls[1]
      

  5.   

    没有人会去研究这个问题的。我奇怪 单元格里 为什么会 随机插入回车换行之类的符号。虽然HTML会略去它,但总归不舒服。
    揭贴。