C# - 填充 Gridview

标签 c# asp.net view grid

我想创建一个 GridView ,其中一列包含用户可以输入数字(数量)的空文本框、一些常规列和一个专用于图像的列。

我在 C# 中有以下代码:

    Label_Error.Visible = false;

    DataTable dt = new DataTable();
    dt.Columns.Add("Quantity", typeof(TextBox));
    dt.Columns.Add("Book ID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Author", typeof(string));
    dt.Columns.Add("Description", typeof(string));
    dt.Columns.Add("Price", typeof(float));
    dt.Columns.Add("Currency", typeof(string));
    dt.Columns.Add("Image", typeof(string));

    DataRow row1 = dt.NewRow();
    row1["Quantity"] = new TextBox();
    row1["Book ID"] = 1;
    row1["Name"] = "Moby Dick";
    row1["Author"] = "Herman Melville";
    row1["Description"] = "Adventure Book";
    row1["Price"] = 10;
    row1["Currency"] = "EUR";
    row1["Image"] = ResolveUrl("~/Images/Logo.png");
    dt.Rows.Add(row1);

    GridView_Products.DataSource = dt;
    GridView_Products.DataBind();

这是我在输出中得到的:

enter image description here

如您所见,空文本框的数量列未显示,图像也未显示。请问如何解决这两个问题?

更新

这是 .aspx 页面中的代码:

<asp:GridView ID="GridView_Products" runat="server" BackColor="White" 
            BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
            HorizontalAlign="Center">
            <FooterStyle BackColor="White" ForeColor="#000066" />
            <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" 
                HorizontalAlign="Center" />
            <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
            <RowStyle ForeColor="#000066" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#007DBB" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#00547E" />
        </asp:GridView>

最佳答案

您需要自己创建列,而不是自动生成它们。

这是一个例子-

enter image description here

<asp:GridView ID="GridView_Products" runat="server" BackColor="White"
    BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"
    HorizontalAlign="Center" AutoGenerateColumns="False">
    <FooterStyle BackColor="White" ForeColor="#000066" />
    <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White"
        HorizontalAlign="Center" />
    <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
    <RowStyle ForeColor="#000066" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#F1F1F1" />
    <SortedAscendingHeaderStyle BackColor="#007DBB" />
    <SortedDescendingCellStyle BackColor="#CAC9C9" />
    <SortedDescendingHeaderStyle BackColor="#00547E" />
    <Columns>
        <asp:BoundField DataField="Book ID" HeaderText="Book ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Author" HeaderText="Author" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:BoundField DataField="Price" HeaderText="Price" />
        <asp:BoundField DataField="Currency" HeaderText="Currency" />
        <asp:TemplateField HeaderText="Quantity">
            <ItemTemplate>
                <asp:TextBox ID="QantityTextBox" runat="server" Text='<%# Eval("Quantity") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Image">
            <ItemTemplate>
                <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Image") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

DataTable dt = new DataTable();
dt.Columns.Add("Quantity", typeof(int)); // Make sure this is integer
dt.Columns.Add("Book ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Author", typeof(string));
dt.Columns.Add("Description", typeof(string));
dt.Columns.Add("Price", typeof(float));
dt.Columns.Add("Currency", typeof(string));
dt.Columns.Add("Image", typeof(string));

DataRow row1 = dt.NewRow();
row1["Quantity"] = 1;
row1["Book ID"] = 1;
row1["Name"] = "Moby Dick";
row1["Author"] = "Herman Melville";
row1["Description"] = "Adventure Book";
row1["Price"] = 10;
row1["Currency"] = "EUR";
row1["Image"] = "~/Images/Logo.png";
dt.Rows.Add(row1);

GridView_Products.DataSource = dt;
GridView_Products.DataBind();

这里有更多关于 GridView 的信息列类型。

关于C# - 填充 Gridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17454910/

相关文章:

c# - 如何使用 OpenPop 保存电子邮件附件

c# - TCP 客户端无法使用框架 4.6.1 绑定(bind)到套接字中的端口 0

c# - 哪些软件可用于创建服务器端 PDF 文件?

c# - 在 ASP.NET 网页中枚举字典

asp.net - 在代码中设置 Page.Theme 会使 css 文件链接到两次

c# - 将非 C++ 子项目集成到 CMake 项目中

c# - ServerManager 如何找到给定站点的状态

ios - 如何从 appDelegate 呈现 UIAlertView

mysql - 如何根据不同服务器中不同数据库中存在的表在服务器中的数据库中创建 View ?

android - 无法在android中以编程方式在 ScrollView 中添加线性布局