创建一个包含5行的gridview

时间:2012-03-31 20:30:23

标签: c# asp.net gridview

我通常会根据数据创建一个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行..无论如何,我将检查是否填写了所有信息以决定是否添加产品。

谢谢

3 个答案:

答案 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: enter image description here

现在我们只需要代码就可以在单击按钮时读回行;我们迭代行,找到每行中的控件来读取它们的值......

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是一个帮助对象,它包含所需列的四个属性。

或者我错过了什么?