【问题标题】:Create a gridview with 5 rows创建一个 5 行的网格视图
【发布时间】:2012-04-15 02:38:41
【问题描述】:

我通常根据数据创建一个网格视图,因此它的行取决于数据源吐出的内容,但这次......我需要做一些不同的事情。我需要有 5 行,每行有以下内容

TextBox |  DropDown   |   FileUploader  |  Checkbox
TextBox |  DropDown   |   FileUploader  |  Checkbox
TextBox |  DropDown   |   FileUploader  |  Checkbox
TextBox |  DropDown   |   FileUploader  |  Checkbox
TextBox |  DropDown   |   FileUploader  |  Checkbox

然后,当单击提交按钮时,它将获取每一行并创建一个产品(我将调用 Product 类并只为该行分配属性并将产品保存为对所有行执行相同操作)。

如果它不依赖于数据,我如何将这 5 个项目添加到 gridview?,它需要像 headers 这样的 gridview 属性

Product Name  |  Lot #   |   Image   |     Active   

如果不依赖于任何数据源,我只是不确定如何添加这 5 行,但仍想使用 gridview 属性。

任何想法都将不胜感激,我第一次必须处理不依赖数据的网格视图。

注意:它将始终是 5 行。无论如何,我会检查是否填写了所有信息以决定是否添加产品。

谢谢

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案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&lt;int&gt;,我们可以在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();
        }
    }
    

    这给了我们这个作为渲染的网格视图:

    现在我们只需要在单击按钮时读取行的代码;我们遍历行,定位每行中的控件以读取它们的值...

    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);
            }
        }
    }
    

    【讨论】:

    • 非常感谢,这是我迄今为止看到的最详细的答案。我真的很感激一步一步,我相信它会帮助许多刚开始使用这项技术的人。
    【解决方案2】:

    您可以使用DataTable 作为网格视图的数据源。你可以看看this example

    编辑:我认为this approach 更适合您的需求。

    【讨论】:

      【解决方案3】:

      您可以创建一个列表并将 DummyObj 的五个项目添加到该列表中。 DummyObj 是一个辅助对象,其中包含您需要的列的四个属性。

      还是我错过了什么?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        相关资源
        最近更新 更多