在asp.net c#中的gridview控件内部使面板可见

时间:2015-04-21 07:20:04

标签: c# asp.net

我写了如下代码行

在aspx文件中

     <asp:TemplateField HeaderText="Is Active">
                  <ItemTemplate>            
      <asp:LinkButton ID="lnkEdit" CssClass="colorlnkbtnedit" runat="server" ToolTip="Edit" CommandArgument='<%# DataBinder.Eval (Container.DataItem, "ProductDocument") %>'
                   CommandName="EditIsActive"><i class=" icon-pencil"></i>      </asp:LinkButton>

                  <asp:Panel ID="pnlIsActEdit" runat="server" Visible="false">  
  ...
  ...
         </asp:Panel>

                  </ItemTemplate>
                  </asp:TemplateField>
<。>在.cs文件中

    protected void gvProductView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Download")
        {
         ...
         ... 
        }
     else if (e.CommandName == "EditIsActive")
        {
            int rowID = Convert.ToInt32(e.CommandArgument);
            GridViewRow r = gvProductView.Rows[rowID]; 

            Panel p = (Panel)r.FindControl("pnlIsActEdit");
            p.Visible = false;
        }
     }

它无法正常工作!抛出"Index was out of range. Must be non-negative and less than the size of the collection"  GridViewRow r = gvProductView.Rows[rowID];代码行的错误消息。

2 个答案:

答案 0 :(得分:1)

您可以检测CommandArgument中行的索引,但实际上您正在使用underyling数据源的ProductDocument初始化它:

CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ProductDocument") %>'

所以这会导致异常。

改为使用:

 CommandArgument='<%# Container.DataItemIndex %>' 

CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'

答案 1 :(得分:0)

为什么会出现此错误?

只是你有10行,但是如果你的rowID大于11,那么你就得到了他的错误。


解决方案

请验证您的行数和rowID值以解决此问题。


建议

我认为您需要获取当前选定的行。如果是,请参阅this MSDN Document