2014-09-23 12 views
0

내 ASP.NET 페이지 열로 추가 얻는 것은 부분적 databound의 gridview를 보여준다의 gridview에서 텍스트 영역에서 데이터를 데이터 테이블

TextBoxes는 사용자 입력 채운 후 DataTable에 열로 추가 될
<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> 

:

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에 대한 입력 데이터를 추가, 액세스 할 수 있습니까?

+0

이 왜 각각 그 두 번째 필요를 수행하십시오 GridViewRow는 컨트롤의 NamingContainer하지 GridView입니까? 매번 각 컬럼을 작성해야합니다. – paqogomez

답변

3

격자의 모든 행을 반복 한 다음 row.FindControl을 사용하여 TextBox을 가져올 수 있습니다.

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 
} 
+0

.SetField가 여기에서 작동하지 않는 부분을 제외하고 Nice입니다. newRow [ "datum"] = ((TextBox) row.FindControl ("datum")). 텍스트); 대신. – AspiringChampionOfCode

+0

@StehAufmSchlauch : <.NET 3.5을 사용하거나 System.Data.DataSetExtensions' dll에 대한 참조를 추가하지 않았습니다. 가독성을 높이고 코드를보다 견고하게 만들어주는 강력하게 타입이 지정되어 있기 때문에'SetField' 또는'Field' 확장 메소드를 선호합니다. 또한 null 가능 유형을 지원합니다. –

+0

그것은 .NET 2.0 프로젝트입니다. DataSetExtensions 메서드에 대한 조언을 주셔서 감사합니다. – AspiringChampionOfCode