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