如何在GridView的CommandArgument中传递多个参数?

3

我正在使用asp.net GridView控件。现在我需要编辑一些行数据。为此,我使用了以下代码:

 <asp:LinkButton ID="btnEdit" Text="Edit" runat="server" CommandName="QuickEdit"  OnClick="btnEdit_Click"
  CommandArgument ='<%# ((CheckBox)(((GridViewRow) Container).Cells[4].Controls[0])).Checked %>'/>

btnEdit_Click 方法如下:

protected void btnEdit_Click(object sender,EventArgs  e)
{
    LinkButton btn = (LinkButton)sender;
    switch (btn.CommandName)
    {
        case "QuickEdit":

        EditPanel.Visible = true;
        GridPanel.Visible = false;
        CheckBox cbRequiresState = (CheckBox)EditPanel.FindControl("checkRequiresState");

        if (btn.CommandArgument =="True")
        {
            cbRequiresState.Checked = true;
        }
        else
        {
            cbRequiresState.Checked = false;
        }

        break;
    }
}

现在,我需要将多个参数作为CommandArgument传递给btnEdit_Click方法,那么我需要做什么呢? 请为我提供一种良好的方式,在该方法中利用这些参数。

为什么不使用GridView的OnRowCommand事件? - codingbiz
3个回答

5
以下是一个例子:
在您的aspx代码中:
<asp:ImageButton ID="btnSelect" runat="server" ImageUrl="~/Images/btnSelect.png" CommandName="Select" CommandArgument='<%# Container.DataItemIndex +";"+Eval("ID") %>' ToolTip="select" CausesValidation="False" /></ItemTemplate>

在你的代码后端:

    string info = e.CommandArgument.ToString();
    string[] arg = new string[2];
    char[] splitter = { ';' };
    arg = info.Split(splitter);

我尝试像这样: CommandArgument ='<%#Container.DataItemIndex +";"+((Label)(((GridViewRow)Container).Cells[1].Controls[0])).Text+";"+ ((CheckBox)(((GridViewRow) Container).Cells[4].Controls[0])).Checked %>'/> 但是出现了一些错误: System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 - Tamal Kanti Dey

2
您可以使用一个字符串,将值用 ; 或其他字符分隔开。

我尝试了这样写: CommandArgument ='<%#Container.DataItemIndex+";"+((Label)(((GridViewRow)Container).Cells[1].Controls[0])).Text+";"+ ((CheckBox)(((GridViewRow) Container).Cells[4].Controls[0])).Checked %>'/> 但是出现了一些错误: System.ArgumentOutOfRangeException: 指定的参数超出了有效值的范围。 - Tamal Kanti Dey
дљ†дЄНиГљињЩж†ЈеБЪпЉЪ((Label)(((GridViewRow)Container).Cells[1].ContвАМвАЛrols[0])).TextгАВжИСиЃ§дЄЇдљ†йЬАи¶БеЬ®RowDataBoundдЇЛдїґдЄ≠иЃЊзљЃеСљдї§еПВжХ∞гАВ - GeorgesD

0
因为CommandArgument是一个简单的字符串,所以连接要传递给事件的参数并在它们之间放置某种分隔符。
然后在btnEdit_Click中通过分隔符拆分这些值。 注意:选择一个分隔符,以便它不是传递给事件的任何参数中包含的字符。

我尝试了这样的代码: CommandArgument ='<%#Container.DataItemIndex+";"+((Label)(((GridViewRow)Container).Cells[1].Controls[0])).Text+";"+ ((CheckBox)(((GridViewRow) Container).Cells[4].Controls[0])).Checked %>'/> 但是出现了一些错误: System.ArgumentOutOfRangeException: 指定的参数超出了有效值的范围。 - Tamal Kanti Dey
@TamalKantiDey,你的GridViewRow有多少列?看起来你正在尝试访问一个超出范围的单元格... - davioooh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接