Binding einer DataTable an Template-Felder des GridView

Kann ich erfolgreich binden, eine DataTable an ein GridView durch das automatische generieren von Spalten, aber ich brauche, um die Anzeige einer mehrzeiligen Zelle für eine der Spalten. Um dies zu tun, ich möchte, um eine Vorlage zu verwenden Feld mit einem Element-template mit einem TextBox-Objekt. Ich fülle in die DataTable durch hinzufügen von Spalten und dann die Zeilen. Ich weiß, meine Datentabelle ist richtig eingestellt, denn es zeigt alle Daten (mit Ausnahme der mehrzeiligen Zelle), wie ich es will. Mein Problem ist immer die gridview-Komponente zu extrahieren, die meine Daten auf der Grundlage der Spaltennamen, und füllt die Vorlage, die Felder, auf die ich eingerichtet habe. Wenn ich wieder AutoGenerateColumns-aus, dann die 4 templatefield Spalten noch angezeigt (in der richtigen Menge nach dem datatable zu), nur leere, und wenn ich es auf true gesetzt, dann sind die 4 leeren Spalten angezeigt, sowie 4 zusätzliche Spalten mit dem gleichen Header, der enthält meine Daten, die unter Verwendung der Standardeinstellungen für das, was die Zelle enthält die Informationen anzuzeigen.

    <asp:GridView ID="DataGrid1" runat="server" AutoGenerateColumns="False"     HeaderStyle-BorderStyle="None" CellPadding="3" ItemStyle-Wrap="true" >
    <Columns>
        <asp:TemplateField HeaderText="Code">
            <asp:ItemTemplate>
                <asp:Label ID="txtCode" runat="server" Text='<%# Eval("Code") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Title">
            <asp:ItemTemplate>
                <asp:Label ID="txtTitle" runat="server" Text='<%# Eval("Title") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Class">
            <asp:ItemTemplate>
                <asp:Label ID="txtClass" runat="server" Text='<%# Eval("Class") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="History">
            <asp:ItemTemplate>
                <asp:TextBox ID="txtHistory" runat="server" IsReadOnly="true" Text='<%# Eval("History")%>'>
                </asp:TextBox>
            </asp:ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Oben ist der Teil meiner asp.net code, bezieht sich auf das GridView in Frage. Folgendes ist, wie ich mein DataTable und binden es.

DataTable table = new DataTable();
table.Columns.Add("Code", typeof(string));
table.Columns.Add("Title", typeof(string));
table.Columns.Add("Class", typeof(string));
table.Columns.Add("History", typeof(string));
for (int i = 0; i < index; i++)
{
    table.Rows.Add(docs[i].Code, docs[i].Name, docs[i].Class.Name, history[i]);
}
DataGrid1.DataSource = table;
DataGrid1.DataBind();

InformationsquelleAutor user229775 | 2014-06-27

Schreibe einen Kommentar