2016-01-07 5 views
0

Я пытаюсь получить значения ячеек gridview. Я могу получить к нему доступ через имя метки, как этотПолучить значения столбца gridview

Label cell1 = ((Label)e.Row.FindControl("cellLabel")); 

Есть 15-20 столбцов присутствуют, поэтому я хочу, чтобы получить доступ к клеткам с помощью индекса. Я попробовал его с e.Row.Cells[2].Text, но я получаю null здесь.

Я не могу получить доступ к gridview непосредственно, так как это внутреннее отображение сетки. Как я могу получить доступ к значению ячейки в RowDatabound?

Образец Gridview

<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false" CssClass="Grid" 

    DataKeyNames="CustomerID" OnRowDataBound="OnRowDataBound"> 

    <Columns> 

     <asp:TemplateField> 

      <ItemTemplate> 

       <img alt = "" style="cursor: pointer" src="images/plus.png" /> 

       <asp:Panel ID="pnlOrders" runat="server" Style="display: none"> 

        <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid"> 

         <Columns> 

          <asp:BoundField ItemStyle-Width="150px" DataField="OrderId" HeaderText="Order Id" /> 

          <asp:BoundField ItemStyle-Width="150px" DataField="OrderDate" HeaderText="Date" /> 

         </Columns> 

        </asp:GridView> 

       </asp:Panel> 

      </ItemTemplate> 

     </asp:TemplateField> 

     <asp:BoundField ItemStyle-Width="150px" DataField="ContactName" HeaderText="Contact Name" /> 

     <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" /> 

    </Columns> 

</asp:GridView> 

gvOrders является внутренним GridView.

+0

показать ваш .aspx GridView –

+0

лучше всего использовать TemplateField вместо BoundField –

+0

Вы пытаетесь получить значение родительского gridview или вложенного gridview? –

ответ

1

Вы можете получить его непосредственно из источника данных

string str = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "YourColumnName")); 

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

string str = ((DataBoundLiteralControl)e.Row.Cells[x].Controls[y]).Text; 
+0

Как я уже сказал, я не хочу использовать имя, поскольку есть много, поэтому я хочу использовать индекс вместо этого. Возможно ли это с этим? –

+2

@ ХаршитСривастава - Но почему вы хотите избежать имен? Разве вы не думаете, что использование 'index' сделает вашу ошибку кода склонной? –

+0

Нет, как я уже сказал, есть много столбцов. Поэтому я мог бы использовать для цикла для индекса, так как я хочу использовать его в некоторых приложениях. Использование имени будет легко реализовать в дальнейших программах, а не в столбцах. –

1
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      string name = e.Row.Cells[0].Text; 
     } 
    } 
Смежные вопросы