如何使用DataTable在GridView中动态填充TextBox

时间:2017-05-23 15:03:31

标签: c# asp.net gridview

这是我的问题:我有一个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吗?

1 个答案:

答案 0 :(得分:0)

如果希望“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">