2013-07-09 6 views
6

Il mio gridview è come questo, ma sto ricevendo errore quando seleziono il pulsante di visualizzazione per trovare la colonna del valore della chiave primaria sull'indice selezionato modificato. Per favore aiutami a risolvere il problema.Come trovare il valore di chiave dati di gridview sulla proprietà modificata per l'indice selezionato?

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

il mio codice è .....

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

      throw; 
     } 
    } 
+0

Qual è l'errore? –

+0

si è verificato il seguente errore .................................. Le chiavi dati devono essere specificate su GridView 'GridView1' prima che i dati selezionati possano essere recuperati. Utilizzare la proprietà DataKeyNames per specificare le chiavi dati. –

risposta

6

Prima si hav e per definire il nome del campo nella vista della griglia dichiarare quale campo si desidera rendere chiave dati. per esempio se si desidera "forumId" datakey.than

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

e di quanto si può accedere in questo modo

int intforumid = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]); 
+0

Thnq il mio problema è risolto ..... thnx alotttt –

0

è possibile impostare DataKeyNames come forumId come qui di seguito

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

Poiché non hai dare alcun dato nomi chiave nella soluzione corrente GridView1.SelectedValue non conterrà il valore che si prevede

0

Sembra che tu solo bisogno di impostare DataKeyNames proprietà forumId simili;

<asp:GridView DataKeyNames = "forumId" ... 
2
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; 
    } 
} 
0

Si avrebbe bisogno di specificare il nome della colonna unica nel gridview da impostare nella scheda Datakey.

Da lì, è necessario richiamare il metodo _selectedIndexChanged sul codice della pagina successiva.

0

Se non si utilizza l'evento select gridview nel codice page.cs, è sufficiente rimuovere OnSelectedIndexChanged = "GridView1_SelectedIndexChanged" dal codice aspx della pagina di gridview.

Problemi correlati