簡體   English   中英

如何使用DataTable在GridView中動態填充TextBox

[英]How to fill TextBox dynamically in a GridView using a DataTable

這是我的問題:我有一個GridView渲染有關設備的一些信息。 但是其中一些信息在TextBox中,可以修改。 我已經用DataTable創建了GridView。 如何在每個TextBox中動態添加信息?

這是我的GridView:

<asp:GridView ID="GridView_Parametre" runat="server" AutoGenerateColumns="false" style="font-size: 15px; width: 100%; text-align: center;">
<Columns>
    <asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_selecteur">
        <HeaderTemplate>
            <asp:Label ID="LabelParam1" runat="server" Text="Sel."></asp:Label>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID="CheckBoxParam1" runat="server"></asp:CheckBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_grandeur">
        <HeaderTemplate>
            <asp:Label ID="LabelParam2" runat="server" Text="Grandeur"></asp:Label>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:DropDownList ID="DropDownListParam2" runat="server" style="width:100%">
                <asp:ListItem value="value" Text="Temps"></asp:ListItem>
                <asp:ListItem value="value" Text="Température"></asp:ListItem>
                <asp:ListItem value="value" Text="[HNO3]"></asp:ListItem>
                <asp:ListItem value="value" Text="[HF]"></asp:ListItem>
                <asp:ListItem value="value" Text="[Fe]"></asp:ListItem>
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField runat="server" HeaderText="Unité" DataField="Unité" HeaderStyle-CssClass="th_parametre_configuration th_unite"/>
    <asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_valeur">
        <HeaderTemplate>
            <asp:Label ID="LabelParam4" runat="server" Text="Min"></asp:Label>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:TextBox ID="TextBoxParam4" runat="server" class="input_configuration_valeur"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_valeur">
        <HeaderTemplate>
            <asp:Label ID="LabelParam5" runat="server" Text="Visée"></asp:Label>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:TextBox ID="TextBoxParam5" runat="server" class="input_configuration_valeur"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_valeur">
        <HeaderTemplate>
            <asp:Label ID="LabelParam6" runat="server" Text="Max"></asp:Label>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:TextBox ID="TextBoxParam6" runat="server" class="input_configuration_valeur"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

這是我填充GridView的方法:

protected void generationGridViewParametre(List<ParametreDC> equipmentParams)
    {
        DataTable dataTable = new DataTable();
        DataColumn dataColumn = new DataColumn("Selection", typeof(bool));
        dataTable.Columns.Add(dataColumn);
        dataColumn = new DataColumn("Grandeur", typeof(string));
        dataTable.Columns.Add(dataColumn);
        dataColumn = new DataColumn("Unité", typeof(string));
        dataTable.Columns.Add(dataColumn);
        dataColumn = new DataColumn("Min", typeof(string));
        dataTable.Columns.Add(dataColumn);
        dataColumn = new DataColumn("Visée", typeof(string));
        dataTable.Columns.Add(dataColumn);
        dataColumn = new DataColumn("Max", typeof(string));
        dataTable.Columns.Add(dataColumn);

        DataRow dataRow;
        for (int i = 0; i < equipmentParams.Count; i++)
        {
            dataRow = dataTable.NewRow();
            dataRow["Selection"] = false;
            dataRow["Unité"] = equipmentParams[i].Unite;
            //dataRow["Min"] = ?????;
            //dataRow["Visée"] = ?????;
            //dataRow["Max"] = ?????;   
            dataTable.Rows.Add(dataRow);
        }

        GridView_Parametre.DataSource = dataTable;
        GridView_Parametre.DataBind();
    }

我不知道如何填充dataRow [“ Min”],dataRow [“Visée”]和dataRow [“ Max”]? 使用DataTable甚至可能嗎?

如果您希望“ Min”列是某個其他列的實際最小值(例如SQL中的MIN聚合函數),則可以為該DataColumn定義一個“ Expression”,如下所示:

dataColumn = new DataColumn("Min", typeof(string), "min(Grandeur)");
dataTable.Columns.Add(dataColumn);

這將始終將該列的值設置為Grandeur列的最小值。 此時,您無需在for循環中設置此列的值。

如果您只想將其設置為靜態值,那么對for循環中其他值所做的工作就可以了。


我注意到了其他幾個問題。

在GridView標記中,您需要設置TextBox的“ Text”屬性以顯示該列的實際數據項。 您可以使用Eval(“ ColumnName”)語法執行此操作,如下所示:

<asp:TemplateField HeaderStyle-CssClass="th_parametre_configuration th_valeur">
    <HeaderTemplate>
        <asp:Label ID="LabelParam4" runat="server" Text="Min">
        </asp:Label>
    </HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="TextBoxParam4" runat="server"class="input_configuration_valeur" 
            Text='<%# Eval("Min") %>'>
    </asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>

但是,您可能想使用TextBox定義EditItemTemplate,並在ItemTemplate中使用Label。

為了稍微簡化您的情況,您實際上可以只使用“ BoundField”列類型(就像您使用Unité一樣)。

然后,您可以打開GridView的AutoGenerateEditButton設置,然后將出現一個帶有“編輯”鏈接的新列。 單擊此按鈕會將所有BoundField列置於編輯模式,用文本框替換標簽。

<asp:GridView ID="GridView_Parametre" runat="server" AutoGenerateColumns="false" 
    style="font-size: 15px; width: 100%; text-align: center;"
    AutoGenerateEditButton="true">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM