在ASP.NET中获取Buttonfield的价值

时间:2014-09-26 19:35:45

标签: c# asp.net gridview buttonfield

假设我的GridView (ID& Name)中只有两列,每当我点击它时我都需要获取ID的值。例如,如果我点击 123 ,我应该 123 。但在这里......事实并非如此......当我点击任何ID时,它会返回该ID旁边的名称(例如;如果是123,我会得到Tony Stark ),但是当我点击后获取ID的值,它总是返回一个空字符串。

换句话说,我在id中获得了名称(当X = 1时),但是当X = 0时,id变为空字符串... (int X和string id:参见C#代码如下)

sample GridView1

我的GridView中的XAML代码:

                        <asp:ButtonField
                            DataTextField="ID"
                            HeaderText="ID">
                        </asp:ButtonField>

                        <asp:BoundField
                            DataField="Name"
                            HeaderText="NAME">
                        </asp:BoundField>

C#:

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        string id = GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[X].Text.ToString();
        Response.Write(id);
    }

出了什么问题?!!以及如何解决这个问题?谢谢!

3 个答案:

答案 0 :(得分:1)

更复杂但更好的解决方案是:

在GridView中,使用DataKeyNames标记和RowCommand事件,并将绑定值放在DataKeyName中,例如:

DataKeyNames="ID" OnRowCommand="GridView1_RowCommand" 

在gridview中使用模板字段(您不需要像下面的示例一样使用图像按钮):

<asp:TemplateField HeaderText="Action">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="Left" Wrap="false" />
                                <ItemTemplate>
                                    <div class="GridViewOpc">
                                        <asp:ImageButton ID="buttonDelete" runat="server" Width="17" Height="17" AlternateText="Update"
                                            CausesValidation="False" Visible="false" CommandName="Delete" Enabled="true"
                                            ImageUrl="~/yourDeletepicture.gif"  />

                                        <asp:ImageButton ID="buttonUpdate" runat="server" AlternateText="Update" Width="17"
                                            Height="17" CausesValidation="False" Visible="false" CommandName="Update" ImageUrl="~/yourUpdatePicture.gif" />
                                    </div>
                                </ItemTemplate>
                            </asp:TemplateField>

在CodeBehind上获取它:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{

            Control ctl = e.CommandSource as Control;
            GridViewRow CurrentRow = ctl.NamingContainer as GridViewRow;

                if (e.CommandName == "Update")
                {

                    int ID = Convert.ToInt32(GridView1.DataKeys[CurrentRow.RowIndex][0]);
                }

               if (e.CommandName == "Delete")
                {

                    int ID = Convert.ToInt32(GridView1.DataKeys[CurrentRow.RowIndex][0]);

                }
    }

答案 1 :(得分:0)

不使用 templateField 您也可以从 ButtonField 获取值。 在您的 ButtonField 中,您需要给它一个 ButtonType

XML:

<asp:ButtonField ButtonType="Link" CommandName="PanelName" DataTextField="PANEL_NAME" HeaderText="Panel Name" runat="server" SortExpression="PANEL_NAME" text="PanleName"/>

代码:

if (e.CommandName == "PanelName")
{
    string PanleName;
    int index = Convert.ToInt32(e.CommandArgument);
    GridViewRow selectedRow = dgSearchResult.Rows[index];
    PanleName = ((LinkButton)selectedRow.Cells[1].Controls[0]).Text;
}

注意:无论您的单元格索引是什么,Cells[1] 表示索引为 1。但如果您的 GridView 中只有一个控件,则控件总是从 0 开始。

答案 2 :(得分:-1)

在你的RowCommand处理程序中,我认为这就是你想要的:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int id = (int)(DataBinder.Eval(e.Row.DataItem, "ID"));
        Response.Write(id);
    }
}

我正在从vb转换,所以我可能错过了一些语法,但你明白了......