开发者

ASP.NET Grid View Problem

开发者 https://www.devze.com 2023-01-27 04:37 出处:网络
I have one gridview where I am passing the command argument as gridview row id for the Button I created for every row.

I have one gridview where I am passing the command argument as gridview row id for the Button I created for every row.

I want to display all the details of that row in the textbox according to the Row clicked.

<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='&开发者_JAVA百科lt;%#Eval("categoryId") %>' />
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
          </asp:GridView>

Code.....

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.
}


I wrote a quick example of how to do what you're trying to do. It works for me.

The Example Solution

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;
}

How It Works

Upon clicking "Modify" in a row, the textbox updates to show the FullName field of the selected row.

The important part is that instead of a TemplateField, use a CommandField with ShowSelectButton="True". Then do what you need to do in the SelectedIndexChanged event handler. Note that the SelectText of the CommandField is set to "Modify" as you desired. You can also set the ButtonType property of the CommandField to be button, image, or link.

Making It Better

I would also advise that instead of using a SqlDataSource as I have, you use an ObjectDataSource so that you can do something like

protected void myGridView_SelectedIndexChanged(object sender, EventArgs e) {
    MyModelObject o = myGridView.SelectedRow.DataItem as MyModelObject;
    txtStudent.Text = o.MyProperty;
}

You may also consider wrapping your GridView in an UpdatePanel to prevent full postbacks / page refreshes.


After you have the lineID, you select that line, and then you have the CategoryID on selected value

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

On GridView you must have set your KeyID

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

精彩评论

暂无评论...
验证码 换一张
取 消