ASP.NET网格视图问题

时间:2010-11-29 09:59:42

标签: asp.net

我有一个gridview,我将命令参数作为我为每一行创建的Button的gridview行id传递。

我想根据单击的行显示文本框中该行的所有详细信息。

<asp:GridView ID="gvCategory" runat="server" AutoGenerateColumns="false" 
              onrowcommand="gvCategory_RowCommand" >
          <Columns>
            <asp:TemplateField>
              <ItemTemplate>
                 <asp:Label ID="lblCatId" runat="server" Text='<%#Eval("categoryId") %>'></asp:Label>
              </ItemTemplate>
            </asp:TemplateField>
             <asp:TemplateField>
              <ItemTemplate>
                 <asp:Label ID="lblCatName" runat="server" Text='<%#Eval("categoryName") %>'></asp:Label>
              </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                <asp:Button ID="btnModify" runat="server" Text="Modify" CommandName="Modify" CommandArgument='<%#Eval("categoryId") %>' />
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
          </asp:GridView>

代码.....

if (e.CommandName == "Modify")
{
     int id = Convert.ToInt32(e.CommandArgument);          
     // I want the value to assgin for the selected row here
     // I was previously fetching the data from database according id,but i want this frim the gridview of selected row.
}

2 个答案:

答案 0 :(得分:2)

我写了一个快速的例子,说明如何做你想做的事情。它对我有用。

示例解决方案

Default.aspx的

<asp:GridView ID="myGridView" runat="server"
    AutoGenerateColumns="False"
    DataSourceID="StudentsDS"
    DataKeyNames="ID"
    OnRowCommand="myGridView_RowCommand"
    OnSelectedIndexChanged="myGridView_SelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" 
            SortExpression="ID" />
        <asp:BoundField DataField="FullName" HeaderText="FullName" 
            SortExpression="FullName" />
        <asp:BoundField DataField="ClassID" HeaderText="ClassID" 
            SortExpression="ClassID" />
        <asp:CommandField ShowSelectButton="True" SelectText="Modify" />
    </Columns>
</asp:GridView>
<asp:TextBox ID="txtStudent" runat="server" />
<asp:SqlDataSource ID="StudentsDS" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Sandbox %>" 
    SelectCommand="SELECT * FROM Student"
/>

Default.aspx.cs

protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e) {
    if (e.CommandName == "Select") {
        // do something here if you want, although not necessary
    }
}

protected void myGridView_SelectedIndexChanged(object sender, EventArgs e) {
    // show "FullName" field of selected row in textbox
    txtStudent.Text = myGridView.SelectedRow.Cells[1].Text;
}

如何运作

单击行中的“修改”后,文本框将更新以显示所选行的FullName字段。

重要的是,TemplateField使用CommandField而不是ShowSelectButton="True"。然后在SelectedIndexChanged事件处理程序中执行您需要执行的操作。请注意,SelectText的{​​{1}}会根据需要设置为“修改”。您还可以将CommandField的{​​{1}}属性设置为按钮,图片或链接。

让它变得更好

我还建议您不要使用ButtonType,而是使用CommandField,以便您可以执行类似

的操作
SqlDataSource

您也可以考虑在UpdatePanel中包装GridView,以防止完整的回发/页面刷新。

答案 1 :(得分:0)

获得lineID后,选择该行,然后选择值

上的CategoryID
int iTheIndexNow = Convert.ToInt32(e.CommandArgument);    

// select that line to see it visual as selected, and get the value on next line
gvCategory.SelectedIndex = iTheIndexNow;    

// here is your categoryID that   
//you can use to open your database with and get the text
gvCategory.SelectedValue // == categoryID

在GridView上,您必须设置KeyID

<asp:GridView DataKeyNames="categoryId" .... >