2012-12-05 48 views
0

我还在学习如何使用gridviews,因为它具有一个由三个表组成的访问数据库(作为练习的一部分),并使用连接语句显示所有三个表中的值字段。编辑gridview的行

conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0; 
           Data Source =" + Server.MapPath("App_Data\\Shopping List.mdb")); 
     conn.Open(); 

     this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('a connection was established with the database')", true); 

     DataSet ds = new DataSet(); 

     OleDbDataAdapter dba = new OleDbDataAdapter(@"SELECT Ingredient.IngredientId, Ingredient.IngredientName, Area.AreaName, Recipe.RecipeName, Ingredient.Quantity 
               FROM (Ingredient 
               INNER JOIN Area ON Ingredient.AreaId = Area.AreaId) 
               INNER JOIN Recipe ON Ingredient.RecipeId = Recipe.RecipeId", conn); 

     dba.Fill(ds); 

     gridIngredients.DataSource = ds; 
     gridIngredients.DataBind(); 

我现在通过将autoGenerateEditButton设置为true来添加一个编辑按钮。我将如何去添加一个文本框或下拉列表到一行来更新数据?

<asp:GridView ID="gridIngredients" runat="server" AutoGenerateColumns="False" 
     BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" 
     CellPadding="2" ForeColor="Black" GridLines="None" 
    AutoGenerateEditButton="True" 
    onselectedindexchanged="gridIngredients_SelectedIndexChanged" 
    Width="543px" onrowediting="gridIngredients_RowEditing"> 
     <Columns> 
      <asp:BoundField DataField="IngredientId" HeaderText="ID" /> 
      <asp:BoundField DataField="IngredientName" HeaderText="Ingredient" /> 
      <asp:BoundField DataField="AreaName" HeaderText="Area" /> 
      <asp:BoundField DataField="RecipeName" HeaderText="Recipe" /> 
      <asp:BoundField DataField="Quantity" HeaderText="Quantity" /> 
     </Columns> 
     <FooterStyle BackColor="Tan" /> 
     <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
      HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> 
     <HeaderStyle BackColor="Tan" Font-Bold="True" /> 
     <AlternatingRowStyle BackColor="PaleGoldenrod" /> 
    </asp:GridView> 

问候

回答

1

对于只读领域,如IngredientId,添加只读= “真” 对于通过文本框编辑字段,像数量。 对于特殊编辑器,如dropdownlist或jQuery插件,请使用TemplateField自定义您的EditItemTemplate(For edit)和ItemTemplate(For view)

<asp:BoundField DataField="IngredientId" HeaderText="ID" ReadOnly="True" /> 
    <asp:BoundField DataField="Quantity" HeaderText="Quantity"/>  
    <asp:TemplateField HeaderText="Area"> 
     <EditItemTemplate> 
      <asp:DropDownList ID="DDLArea" runat="server" 
       Text='<%# Bind("AreaCode") %>'> 
       <!--items--> 
       </asp:DropDownList> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <asp:Label ID="Label1" runat="server" 
       Text='<%# Eval("AreaName") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
<asp:BoundField DataField="IngredientId" HeaderText="ID" ReadOnly="True" /> 
    <asp:BoundField DataField="Quantity" HeaderText="Quantity"/>  
    <asp:TemplateField HeaderText="Area"> 
     <EditItemTemplate> 
      <asp:DropDownList ID="DDLArea" runat="server" 
       Text='<%# Bind("AreaCode") %>'> 
       <!--items--> 
       </asp:DropDownList> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <asp:Label ID="Label1" runat="server" 
       Text='<%# Eval("AreaName") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
1

您可以修改Columns部分如下:

<Columns> 
    <asp:BoundField DataField="IngredientId" HeaderText="ID" /> 
    <asp:BoundField DataField="IngredientName" HeaderText="Ingredient" /> 
    <asp:BoundField DataField="AreaName" HeaderText="Area" /> 
    <asp:BoundField DataField="RecipeName" HeaderText="Recipe" /> 
    <asp:BoundField DataField="Quantity" HeaderText="Quantity" /> 

    <asp:TemplateField> 
     <HeaderTemplate> 
      A custom column 
     </HeaderTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="textBox" runat="server"></asp:TextBox> 
     </EditItemTemplate> 
    </asp:TemplateField> 

</Columns>