我通常会根据数据创建一个gridview,因此根据数据源吐出的内容会有行,但这次......我需要做一些不同的事情。我需要在每行上有5行,每行
TextBox | DropDown | FileUploader | Checkbox
TextBox | DropDown | FileUploader | Checkbox
TextBox | DropDown | FileUploader | Checkbox
TextBox | DropDown | FileUploader | Checkbox
TextBox | DropDown | FileUploader | Checkbox
然后,当点击提交按钮时,它将占用每一行并创建一个产品(我将调用Product类,只是为行分配属性并保存产品,对所有行都一样)。
如果它不依赖于数据,我怎么能将这5个项目添加到gridview中?它将需要像header这样的gridview属性
Product Name | Lot # | Image | Active
我不知道如果不依赖于任何数据源,如何添加这5行,但仍想使用gridview属性。
任何想法都会非常感激,第一次我必须处理不依赖于数据的gridview。
注意:它总是5行..无论如何,我将检查是否填写了所有信息以决定是否添加产品。
谢谢
答案 0 :(得分:1)
首先,让我们使用标记中的控件创建Gridview,并在下面创建一个按钮来保存产品......
<asp:GridView runat="server" ID="ProductGridview" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Product Name">
<ItemTemplate>
<asp:TextBox runat="server" ID="ProductNameTextBox" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Lot #">
<ItemTemplate>
<asp:DropDownList runat="server" ID="LotNumberDropDownList">
<asp:ListItem Text="1" />
<asp:ListItem Text="2" />
<asp:ListItem Text="3" />
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:FileUpload runat="server" ID="ImageFileUpload" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Active">
<ItemTemplate>
<asp:CheckBox Text="Active" runat="server" ID="ActiveCheckBox" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button Text="Save Products" runat="server" ID="SaveProductsButton" OnClick="SaveProductsButton_Click" />
...在每一行给我们一个文本框,下拉列表,文件上传和复选框。
现在,我们需要生成一组5行。我们可以通过将gridview绑定到List<int>
来实现 ,我们可以在Page_Load
中生成...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Generate a list of 5 integers - this will be the data source for the GridView
List<int> rows = new List<int>();
for (int i = 0; i < 5; i++)
{
rows.Add(i);
}
//Bind the Gridview to the list of integers so we get 5 rows in the UI
ProductGridview.DataSource = rows;
ProductGridview.DataBind();
}
}
这为我们提供了渲染的gridview:
现在我们只需要代码就可以在单击按钮时读回行;我们迭代行,找到每行中的控件来读取它们的值......
protected void SaveProductsButton_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in ProductGridview.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
// Have to cast the result of FindControl to the correct type
TextBox productTextBox = (TextBox)row.FindControl("ProductNameTextBox");
DropDownList lotNumberDropDownList = (DropDownList)row.FindControl("LotNumberDropDownList");
FileUpload imageFileUpload = (FileUpload)row.FindControl("ImageFileUpload");
CheckBox activeCheckBox = (CheckBox)row.FindControl("ActiveCheckBox");
saveProduct(productTextBox.Text, lotNumberDropDownList.SelectedItem.Text,
imageFileUpload.PostedFile, activeCheckBox.Checked);
}
}
}
答案 1 :(得分:0)
您可以使用DataTable
作为网格视图的数据源。您可以查看this example。
编辑:我认为this approach更适合您的需求。
答案 2 :(得分:0)
您可以创建一个List并将五个DummyObj项添加到该列表中。 DummyObj是一个帮助对象,它包含所需列的四个属性。
或者我错过了什么?