2013-12-01 2 views
1

Я пытаюсь создать корзину покупок, но я застрял в доставке предметов в корзину.Получите информацию от GridViewRow, используя индекс строки

Я загрузке мой список элементов, используя список:

<asp:GridView ID="gridItems" runat="server" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" 
       BorderStyle="None" BorderWidth="1px" CellPadding="3" Height="227px" 
       onselectedindexchanged="GridView1_SelectedIndexChanged1" Width="651px" 
       HorizontalAlign="Center" DataKeyNames="ID" style="margin-top: 0px" OnRowCommand = "gridItems_RowCommand"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <table align="center" style="width:37%; height: 146px;"> 
        <tr> 
         <td class="style5" colspan="2"> 
          <asp:Image ID="imgArt" runat="server" Height="110px" Width="160px" 
           ImageUrl=<%# DataBinder.Eval(Container.DataItem,"Imagen")%> /> 
         </td> 
        </tr> 
        <tr> 
         <td colspan="2" style="text-align: center"> 
          <asp:Label ID="lblName" runat="server" CssClass="textEntry" 
           style="text-align: center" Text=""><%# DataBinder.Eval(Container.DataItem,"Nombre")%></asp:Label> 
          <br /> 
          <asp:Label ID="lblCategory" runat="server"><%# DataBinder.Eval(Container.DataItem,"Categoria")%></asp:Label> 
         </td> 
        </tr> 
        <tr> 
         <td class="style6"> 
          Cantidad: 
          <asp:TextBox ID="txtCant" runat="server" CssClass="textEntry" Height="25px" 
           Width="33px">1</asp:TextBox> 
         </td> 
         <td class="style7"> 
          <asp:Button ID="btnAddToCart" CssClass = "textEntry" runat="server" CommandName="Add to cart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" Text="Add to cart" /> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 

После строки щелкнул, я обрабатывать событие с RowCommand:

protected void gridItems_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "AddToCart") 
     { 
      // Retrieve the row index stored in the 
      // CommandArgument property. 
      int index = Convert.ToInt32(e.CommandArgument); 

      // Retrieve the row that contains the button 
      // from the Rows collection. 
      GridViewRow row = this.gridItems.Rows[index]; 
      } 
     } 

Проблема заключается в том, что после того, как я получаю «row», он имеет только индекс сетки, и я не знаю, как вернуть его обратно объекту, используя информацию, содержащуюся в строке.

Я ценю помощь :)

ответ

0

Чем проще способ справиться с этим, вы должны привязать данные к Tex т свойства элементов управления в ItemTemplate.

Таким образом, ваш GridView тег должен выглядеть так:

<asp:GridView ID="gridItems" runat="server" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" 
       BorderStyle="None" BorderWidth="1px" CellPadding="3" Height="227px" 
       onselectedindexchanged="GridView1_SelectedIndexChanged1" Width="651px" 
       HorizontalAlign="Center" DataKeyNames="ID" style="margin-top: 0px" OnRowCommand = "gridItems_RowCommand"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <table align="center" style="width:37%; height: 146px;"> 
        <tr> 
         <td class="style5" colspan="2"> 
          <asp:Image ID="imgArt" runat="server" Height="110px" Width="160px" 
           ImageUrl='<%# DataBinder.Eval(Container.DataItem,"Imagen")%>' /> 
         </td> 
        </tr> 
        <tr> 
         <td colspan="2" style="text-align: center"> 
          <asp:Label ID="lblName" runat="server" CssClass="textEntry" 
           style="text-align: center" Text='<%# Bind("Nombre")%>'></asp:Label> 
          <br /> 
          <asp:Label ID="lblCategory" runat="server" Text='<%# Bind("Categoria")%>'></asp:Label> 
         </td> 
        </tr> 
        <tr> 
         <td class="style6"> 
          Cantidad: 
          <asp:TextBox ID="txtCant" runat="server" CssClass="textEntry" Height="25px" 
           Width="33px">1</asp:TextBox> 
         </td> 
         <td class="style7"> 
          <asp:Button ID="btnAddToCart" CssClass = "textEntry" runat="server" CommandName="AddToCart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" Text="Add to cart" /> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 

Пожалуйста, обратите внимание на кнопку btnAddToCart, его CommandName должен быть установлен в «AddToCart» вместо «Добавить в корзину» в вашем коде ,

Тогда в вас обработчик событий RowCommand вы можете использовать код как penjepitkertasku ответ

protected void gridItems_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "AddToCart") 
    { 
     // Retrieve the row index stored in the 
     // CommandArgument property. 
     int index = Convert.ToInt32(e.CommandArgument); 

     // Retrieve the row that contains the button 
     // from the Rows collection. 
     GridViewRow row = this.gridItems.Rows[index]; 

     //get key setting in DataKeyNames 
     string id = gridItems.DataKeys[index].Value.ToString(); 

     //get value from Controls in ItemTemplate 
     string name = ((Label)(row.FindControl("lblName"))).Text; 
     string category = ((Label)(row.FindControl("lblCategory"))).Text; 
     string cantidad = ((TextBox)(row.FindControl("txtCant"))).Text; 

    } 
} 
+0

Спасибо, что на самом деле я решил это, сделав то же самое, но используя текстовое поле. Никогда не осознавал, что проблема была у меня никогда не было прежде чем привязать данные к полю «Текст». – Mariano

0

Вы можете использовать:

//get row 
GridViewRow gvr = ((GridViewRow)(((Button)e.CommandSource).NamingContainer)); 

//get datakey 
string id = gridItems.DataKeys[Convert.ToInt32(gvr.RowIndex)].Value.ToString(); 

//get field value 
string name = ((Label)(gvr.FindControl("lblName"))).Text; 
string category = ((Label)(gvr.FindControl("lblCategory"))).Text; 
string cantidad = ((TextBox)(gvr.FindControl("txtCant"))).Text; 

, чтобы получить информацию, содержащуюся в строке

+0

Спасибо, теперь он делает принести TextBox, но поля этикетки возвращаются пустые :( я рыть вокруг и Кажется, что есть проблема с элементами управления, которые загружаются на клиентском компьютере, а не на сервере, особенно на ярлыке. – Mariano

Смежные вопросы