我有一个页面,其中有一个下拉列表,其中填充了名称(Text
)和ID(Value
),以及我页面上的一个按钮。希望做的是当在下拉列表(DDL)中选择一个项目,并单击该按钮时,一行被添加到GridView
,其中包含一列中DDL的Text值,并且另一列中的可编辑字段(默认为空白文本)。
以下是我的GridView
,DropDownList
和Button
的标记。
<asp:GridView runat="server" ID="grdSelectedProduct" BorderWidth="1px" CellPadding="3" CellSpacing="2" AutoGenerateColumns="False" OnRowDataBound="grdSelectedProduct_OnRowDataBound" ShowHeaderWhenEmpty="True">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product" ReadOnly="False"/>
<asp:BoundField DataField="Description" HeaderText="Description" ReadOnly="False"/>
</Columns>
</asp:GridView>
<asp:Button ID="btnAddProduct" runat="server" Text="Add Product" ValidationGroup="valproduct"
OnClick="btnAddProduct_OnClick" CssClass="btnAdd" CausesValidation="true" />
<asp:DropDownList runat="server" ID="ddlProducts" DataTextField="description"
DataValueField="alphaKey" CssClass="select" />
到目前为止,我已经能够使用以下硬编码值向网格添加一行,但是这不会使第二列可编辑并且仅添加1行。如果我再次单击该按钮,它将删除值。
protected void btnAddProduct_OnClick(object sender, EventArgs e)
{
DataTable dataTable = new DataTable();
DataRow dataRow;
dataTable.Columns.Add("ProductName");
dataTable.Columns.Add("Description"); // This can be editted by the user
if (grdSelectedCountries.Rows.Count > 0)
{
for (int i = 0; i < grdSelectedCountries.Rows.Count - 1; i++)
{
if (grdSelectedProduct.Rows[i].RowType == DataControlRowType.DataRow)
{
dataRow = dataTable.NewRow();
dataRow["ProductName"] = "MyTestProduct";
dataRow["Description"] = "";
dataTable.Rows.Add(dataRow);
}
}
}
else
{
dataRow = dataTable.NewRow();
dataRow["ProductName"] = "MyTestProduct";
dataRow["Description"] = "";
dataTable.Rows.Add(dataRow);
}
grdSelectedProduct.DataSource = dataTable;
grdSelectedProduct.DataBind();
}
我关心的一件事是,如果我将代码放在btnAddProduct_OnClick
事件中那么工作服务器端吗?客户端是否会正确更新?
我能否就如何实现目标提供一些指导?
我也意识到这个q&amp; a:passing the value of dropdownlist into gridview,但要求数据表保留在Session
中,我希望避免使用。