VS2010 asp.net:捕获一个不可见的GridView列值

时间:2010-04-28 13:44:34

标签: c# asp.net visual-studio-2010

如何将GridView列值传递给后面的代码而不显示它?在下面的代码中,我想捕获ContactID,而不是让它在GridView中可见。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" 
    OnRowCommand="_OnRowCommand"

    >
    <Columns>
        <asp:BoundField DataField="ContactID" HeaderText="ContactID" 
            SortExpression="ContactID" InsertVisible="False" ReadOnly="True" />


.....other columns in the grid....

        <asp:ButtonField ButtonType=Button CommandName="Remove" Text="Remove" />
    </Columns>
</asp:GridView>

我想按如下方式捕获ContactID。我无法在GridView中将其设为visible = true。

if (e.CommandName.Equals("Remove"))
{
    int index = Convert.ToInt32(e.CommandArgument);
    int ContactID = Convert.ToInt32(GridView1.Rows[index].Cells[0].Text.Trim());
}

请帮忙。

谢谢..

1 个答案:

答案 0 :(得分:1)

您想要的以及您的代码正在做什么是两回事。

我认为你在寻找的是:

String ContactID = e.Row.Cells(0).Text;

但是,我提出了另一种方式:

您可以在Button上使用CommandArgument。这意味着您通过Button本身传递参数。您不需要从任何其他控件获取参数。要做到这一点,你会这样做:

    <asp:ButtonField ButtonType=Button CommandName="Remove" Text="Remove" CommandArgument='<%# Eval("ContactID") %>' />

然后您的代码如下所示:

 if (e.CommandName.Equals("Remove"))
 {
     int ContactID = Convert.ToInt32(e.CommandArgument);
 }

以下是GridView with CommandArguments的一个很好的例子。