[英]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.