How to find the gridview binding value for a selected property with a modified index?

My gridview looks like this, but I get an error when I select the browse button to find the column of primary key values โ€‹โ€‹in the selected index. Please help me solve the problem.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> <Columns > <asp:TemplateField > <ItemTemplate > <asp:Button ID="btnViewComments" Text ="View Comments" runat ="server" CommandName ="select" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField ="forumId" Visible ="false" /> <%--<asp:CommandField ButtonType ="Button" ShowSelectButton ="true" SelectText ="View Comments"/>--%> <asp:TemplateField HeaderText ="Question"> <ItemTemplate > <asp:TextBox ID ="txtQuestion" Text ='<%#Eval("question")%>' runat ="server" TextMode ="MultiLine" Height="100" Width ="350"></asp:TextBox> <%-- <%#Eval("question")%>--%> </ItemTemplate> <%--<EditItemTemplate > <asp:TextBox ID ="txtQuestion" Text ='<%#Eval("question")%>' runat ="server" TextMode ="MultiLine" ></asp:TextBox> </EditItemTemplate>--%> </asp:TemplateField> <asp:TemplateField HeaderText="Poster Name"> <ItemTemplate > <%#Eval("posterName") %> </ItemTemplate> <EditItemTemplate > <asp:Label ID ="lblPosterName" Text ='<%#Eval("posterName") %>' runat ="server" ></asp:Label> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Date"> <ItemTemplate > <%#Eval("dateTim") %> </ItemTemplate> <EditItemTemplate > <asp:Label ID ="lblDateTime" Text ='<%#Eval("dateTim") %>' runat ="server" ></asp:Label> </EditItemTemplate> </asp:TemplateField> </Columns> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#999999" /> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> </asp:GridView> 

my code .....

 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { try { Int64 forumId = (Int64)GridView1.SelectedValue; Session["forumId"] = forumId; Response.Redirect("Thread.aspx"); } catch (Exception) { throw; } } 
+6
source share
6 answers

First you need to define the field name in the grid view declaration, in which field you want to make datakey. for example if you want "forumId" datakey.than

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" DataKeyNames="forumId"> 

and you can access this way

 int intforumid = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]); 
+6
source
 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { try { Int64 forumId = Convert.ToInt64(GridView1.SelectedRow.Cells[1].Text); Session["forumId"] = forumId; Response.Redirect("Thread.aspx"); } catch (Exception) { throw; } } 
+2
source

you can set DataKeyNames as forumId as below

 <asp:GridView ID="GridView1" runat="server" DataKeyNames = "forumId" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> 

Since you did not specify data key names in the current solution, GridView1.SelectedValue will not contain the expected value

0
source

It looks like you just need to set the DataKeyNames property to forumId like;

 <asp:GridView DataKeyNames = "forumId" ... 
0
source

You will need to specify a unique column name in the gridview, which must be set on the Datakey tab.

From there, you will need to call the _selectedIndexChanged method for the code from the previous page.

0
source

If you are not using the select gridview event in your page.cs code, you simply remove OnSelectedIndexChanged = "GridView1_SelectedIndexChanged" from the aspx code of the gridview page.

0
source

Source: https://habr.com/ru/post/948994/


All Articles