2013-07-03 136 views
1

我想创建一个网格视图,其中一列包含空的文本框,用户可以在其中输入数字(数量),一些常规列和专用于图像的列。C# - 填充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> 
+0

请在ASPX页面中发布GridView标签。 – Win

+0

对不起。我会立即发布。 – Matthew

回答

4

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

下面是一个例子 -

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列类型。

+0

非常感谢:) – Matthew

1

不知道所要求的规格,我会使用在你的GridView的EditItemTemplate中建议,并放置一个TextBox控件内部的。

你是否需要编程创建你的gridview?这个怎么样...

<asp:gridview> 
<columns> 
<asp:TemplateField HeaderText="..."> 
<ItemTemplate> 
<asp:Label ID="lbl_Quantity" runat="server" Text='<%# Eval("PutDateFieldNameHere") %>' 
</asp:Label> 
</ItemTemplate> 
<EditItemTemplate> 
<asp:Textbox ID="txt_Quantity" runat="server" Text='<%# Eval("DataFieldName") %>'></asp:Textbox> 
</EditItemTemplate> 
</asp:TemplateField> 
<ItemTemplate> 
<asp:Button ID="btn_Edit" runat="server" CommandName="EditQty" Text="Edit" CommandArgument='<%# ("ItemId") %>' /> 
</ItemTemplate> 
</columns> 
</asp:gridview> 

这个设计需要一个按钮来显示文本框,但还有其他方法来实现这一点。如果使用按钮方法,请确保在后面的代码中连接CommandName事件,并且每个正在更改的项目数量的主键都绑定到该按钮。

+0

好的谢谢:)事实上,我会采取这种方法。 – Matthew

+0

@snowYetis ***这不应该是一个评论吗?*** – Win

+0

@Win在事后我想你是对的。指出。 – snowYetis