получить данные из textarea в gridview добавить как столбец в datatable

Моя страница ASP.NET показывает частично databound gridview:

<asp:GridView ID="myGridView" runat="server" AutoGenerateColumns="False">
  <Columns>
    <asp:BoundField DataField="name" HeaderText="Name" />
    <asp:TemplateField HeaderText="Datum" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="datum" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Uhrzeit" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="uhrzeit" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Ort" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="ort" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Hausnummer" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="hausnummer" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Gebäude" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="gebaeude" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Raumnummer" ItemStyle-CssClass="tdRight">
      <ItemTemplate>
        <asp:TextBox ID="raumnummer" runat="server" Text=""></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

TextBoxes должны быть заполнены пользовательским вводом, а затем добавлены в виде столбцов в DataTable:

DataTable inputData = new DataTable();
inputData.Columns.Add(new DataColumn("datum", typeof(String)));
inputData.Columns.Add(new DataColumn("uhrzeit", typeof(String)));
inputData.Columns.Add(new DataColumn("ort", typeof(String)));
inputData.Columns.Add(new DataColumn("hausnummer", typeof(String)));
inputData.Columns.Add(new DataColumn("gebaeude", typeof(String)));
inputData.Columns.Add(new DataColumn("raumnummer", typeof(String)));
foreach(DataRow row in myGridView.Rows) {
  foreach(DataColumn col in row.ItemArray) {
    DataRow dr = inputData.NewRow();
    dr["datum"] = ((TextBox) myGridView.FindControl("datum")).Text;
    dr["uhrzeit"] = ((TextBox) myGridView.FindControl("uhrzeit")).Text;
    dr["ort"] = ((TextBox) myGridView.FindControl("ort")).Text;
    dr["hausnummer"] = ((TextBox) myGridView.FindControl("hausnummer")).Text;
    dr["gebaeude"] = ((TextBox) myGridView.FindControl("gebaeude")).Text;
    dr["raumnummer"] = ((TextBox) myGridView.FindControl("raumnummer")).Text;
    inputData.Rows.Add(dr);
    printRow(dr);
  }
}

Как я могу получить доступ к textareas, получая текст от каждого и добавляя входные данные к DataTable, используемому для создания каждой строки?


person AspiringChampionOfCode    schedule 23.09.2014    source источник
comment
Зачем вам эта секунда для каждого? Каждый раз вы будете переписывать каждую колонку.   -  person crthompson    schedule 23.09.2014


Ответы (1)


Вы можете зациклить все строки в сетке, а затем использовать row.FindControl, чтобы получить TextBoxes. GridViewRow - это NamingContainer элементов управления, а не GridView:

foreach (GridViewRow row in myGridView.Rows)
{
    DataRow newRow = inputData.Rows.Add();
    newRow.SetField("datum", ((TextBox)row.FindControl("datum")).Text);
    // and so on...
    // note that you don't need to add the row since it's already added
}
person Tim Schmelter    schedule 23.09.2014
comment
Хорошо, за исключением той части, где .SetField здесь не работает. Мне пришлось использовать newRow[datum] = ((TextBox)row.FindControl(datum)).Text); вместо. - person AspiringChampionOfCode; 24.09.2014
comment
@StehAufmSchlauch: вы либо используете ‹ .NET 3.5, либо не добавили ссылку на System.Data.DataSetExtensions dll. Я предпочитаю методы расширения SetField или Field, поскольку они работают со строгой типизацией, что повышает удобочитаемость и делает код более надежным. Они также поддерживают типы, допускающие значение NULL. - person Tim Schmelter; 24.09.2014
comment
это проект .NET 2.0. Спасибо за совет с методами DataSetExtensions. - person AspiringChampionOfCode; 24.09.2014