GridView编辑状态时,其中一列变成DropDownList供选择,然后执行更新,如何实现?我用模板列,但是后台cs文件中却不认“商品分类这”个DropDownList不知为何?  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            onrowediting="GridView1_RowEditing" 
            onrowcancelingedit="GridView1_RowCancelingEdit" 
            onrowupdating="GridView1_RowUpdating">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:CommandField ShowDeleteButton="True" />
                <asp:BoundField DataField="商品编号" DataFormatString="{0:d}" HeaderText="商品编号" />
                <asp:TemplateField HeaderText="商品类别">
                    <EditItemTemplate>
                        <asp:DropDownList ID="商品分类" runat="server" OnLoad="商品分类函数"></asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="商品类别名称" runat="server" Text='<%#Bind("商品类别名称") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="商品名称" HeaderText="商品名称" />
                <asp:ImageField DataImageUrlField="商品小图地址" HeaderText="商品小图">
                </asp:ImageField>
                <asp:ImageField DataImageUrlField="商品大图地址" HeaderText="商品大图">
                </asp:ImageField>
                <asp:BoundField DataField="商品规格" HeaderText="商品规格" />
                <asp:BoundField DataField="商品面料" HeaderText="商品面料" />
                <asp:BoundField DataField="商品A价" DataFormatString="{0:c}" HeaderText="商品A价" />
                <asp:BoundField DataField="商品B价" DataFormatString="{0:c}" HeaderText="商品B价" />
                <asp:CheckBoxField DataField="是否精品" HeaderText="是否精品" />

解决方案 »

  1.   

    DropDownList要绑定数据啊!
    如在CS中    
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
      ...
      DropDownList dlSet = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("商品分类");
      dlSet.DataSource = DataClass.SQLDataClass.DsSqlDataSet("select Name,ID from Abc");
      dlSet.DataTextField = "Name";
      dlSet.DataValueField = "ID";
      dlSet.DataBind();
      ...
    }
      

  2.   

    <EditItemTemplate> 
              <asp:DropDownList ID="商品分类" runat="server" OnLoad="商品分类函数" DataSource='<%# Get商品分类() %>'> </asp:DropDownList> 
    </EditItemTemplate>绑定表达式中使用一个protected的函数返回数据集合。同时还可以:1. 可以在绑定表达式使用 Eval 函数使得 DropdownList的获取数据源函数跟行数据有关。
    2. 如果DropdownList的数据源需要访问数据库,应该使用数据Cache,相同的查询不应该重复访问数据库。
      

  3.   

    商品分类  应该是对象作为商品的属性吧? 对象是不能直接更新的。
    假设 商品分类的类为 ProductType ,属性为  Id 和 Name
    <ItemTemplate>
        <asp:Label ID="lblPTName" runat="server" Text=' <%#Eval("ProductType.Name") %>' >
    </ItemTemplate>
    <EditItemTemplate>
                        <asp:DropDownList ID="ddlProductType" runat="server" DataSourceID="odsProductType" 
                            DataTextField="Name" DataValueField="Id">
                        </asp:DropDownList>
                        <asp:ObjectDataSource ID="odsProductType" runat="server" 
                            SelectMethod="GetProductTypeAll" TypeName="BLL.ProductTypeManager">
                        </asp:ObjectDataSource>
      </EditItemTemplate>
    显示的时候就能读出 ProductType的 Name.
    而在更新模板里,用DropDownList 从业务逻辑层查询所有商品分类的方法读出所有ProductType,设置显示的是Name,值是Id在CS中    
    protected void GridView1_RowUpdating(object sender, GridViewEditEventArgs e) 
    {
        DropDownList ddl = this.DetailsView1.FindControl("ddlProductType") as DropDownList;
            this.odsProduct.UpdateParameters.Add("ptid", ddl.SelectedValue);//吧选中的商品分类的Id加入更新参数
    }
      

  4.   

    除此以外,也仍然可以在EditTemplate中放一个数据源控件(ObjectDataSource或者SqlDataSource)。
      

  5.   

    如果不在乎回发效果 你可以把DropDownList的属性设置为可回发,
     
    考虑就加个AJ吧
      

  6.   

    GridView里使用 DropDownList 更新数据列
      

  7.   

     <asp:DropDownList ID="商品分类" runat="server" DateTextField="xxx"  DateValueField="xxxx" SelectedValue='<%# Bind("xxxx") %>'> </asp:DropDownList> 
      

  8.   

    <ItemTemplate> 
    <asp:DropDownList ID="ddlSort" runat="server" Width="98%"> 
        </asp:DropDownList> 
    <asp:HiddenField ID="Hd_Sort" runat="server" Value=' <%# Eval("BalSort")%>' /> 
    </ItemTemplate> 
    protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
            { 
                if (e.Row.RowIndex != -1) 
                {  if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit)) 
                { 
                    ((DropDownList)e.Row.FindControl("ddlSort")).SelectedValue = ((HiddenField)e.Row.FindControl("Hd_Sort")).Value; 
                } 
                } 
            } protected void gv_RowEditing(object sender, GridViewEditEventArgs e) 
            { 
                gv.EditIndex = e.NewEditIndex; 
                string strSort = ((DropDownList)gv.Rows[e.NewEditIndex].FindControl("ddlSort")).SelectedValue.Trim(); 
                gv.EditIndex = -1; 
                BindData(); 
            } 
      

  9.   

    问题如下:
    问题再说一下1、有一个商品的表 以及 商品类别的表,商品表中有商品类别的编号;数据库有一个查看商品的存储过程,可以查看商品的详细信息,SELECT * from 商品 inner JOIN 商品类别 ON 商品.商品类别编号=商品类别.商品类别编号;
    2、商品管理中,在编辑状态下,想把商品类别这一列转变为下拉菜单,这里我做了一个是按照层次列出的,编辑状态下的商品类别数据源是在后台文件中添加进去的;供选择;
    3、目前我用的是模板列,
    目前我需要进行数据更新,如何得到选择的下拉菜单中商品分类的值,目前我一点更新,下拉菜单中数据全消失,并且还是处在编辑状态

    前台文件:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="商品管理.aspx.cs" Inherits="汇通玩具网站.admin.商城.商品管理" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>商品管理</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                onrowediting="GridView1_RowEditing" 
                onrowcancelingedit="GridView1_RowCancelingEdit" 
                onrowupdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:CommandField ShowDeleteButton="True" />
                    <asp:BoundField DataField="商品编号" DataFormatString="{0:d}" HeaderText="商品编号" />
                    <asp:TemplateField HeaderText="商品类别">
                        <EditItemTemplate>
                            <asp:DropDownList ID="商品分类" runat="server"></asp:DropDownList>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="商品类别名称" runat="server" Text='<%#Eval("商品类别名称") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="商品名称" HeaderText="商品名称" />
                    <asp:ImageField DataImageUrlField="商品小图地址" HeaderText="商品小图">
                    </asp:ImageField>
                    <asp:ImageField DataImageUrlField="商品大图地址" HeaderText="商品大图">
                    </asp:ImageField>
                    <asp:BoundField DataField="商品规格" HeaderText="商品规格" />
                    <asp:BoundField DataField="商品面料" HeaderText="商品面料" />
                    <asp:BoundField DataField="商品A价" DataFormatString="{0:c}" HeaderText="商品A价" />
                    <asp:BoundField DataField="商品B价" DataFormatString="{0:c}" HeaderText="商品B价" />
                    <asp:CheckBoxField DataField="是否精品" HeaderText="是否精品" />            </Columns>
            </asp:GridView>
        
        </div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </form>
        </body>
    </html>后台文件:
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using 商城;namespace 汇通玩具网站.admin.商城
    {
        public partial class 商品管理 : System.Web.UI.Page
        {
           
                   protected void Page_Load(object sender, EventArgs e)
            {
          
                管理商品();       
            }        protected void 管理商品()
            {
                商品 商品1 = new 商品();
                商品1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
                商品1.管理商品存储过程名 = "管理商品存储过程";            GridView1.DataSource = 商品1.管理商品();
                GridView1.DataBind();
            }        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                //管理商品();
                
                商品 商品1 = new 商品();
                商品1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
                商品1.管理商品存储过程名 = "管理商品存储过程";            GridView1.DataSource = 商品1.管理商品();
                GridView1.DataBind();            DropDownList 商品分类 = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("商品分类"); 
                //TextBox 商品名称 = (TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("商品名称");
                //GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0].Visible = false;
                //GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0].Visible = false;
                //((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[2].Controls[0]).ReadOnly = true;            //GridView1.Rows[GridView1.EditIndex].Cells[3].Controls.Clear();
                /*
                DropDownList 商品分类 = new DropDownList();
                商品分类.ID = "商品分类";   
                
                 */
                商品分类.AutoPostBack = true;
                商品分类.EnableViewState = true;
                商品分类.SelectedIndexChanged += new EventHandler(商品分类_SelectedIndexChanged);
                            商品类别 商品类别1 = new 商品类别();
                商品类别1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
                商品类别1.列出第一级商品类别存储过程名 = "列出第一级商品类别存储过程";
                商品类别1.列出该级下的商品类别存储过程名 = "列出该级下的商品类别存储过程";
                商品分类.DataSource = 商品类别1.列出所有商品类别();
                商品分类.DataTextField = "商品类别名称";
                商品分类.DataValueField = "商品类别编号";
                商品分类.DataBind();
                商品类别1.清空输出表();
                /*
                GridView1.Rows[GridView1.EditIndex].Cells[5].Controls.Clear();
                GridView1.Rows[GridView1.EditIndex].Cells[6].Controls.Clear();            GridView1.Rows[GridView1.EditIndex].Cells[3].Controls.Add(商品分类);            //GridView1.Rows[GridView1.EditIndex].Cells[6].Style=;
                FileUpload 小图上传 = new FileUpload();
                小图上传.EnableViewState = true;
                FileUpload 大图上传 = new FileUpload();
                大图上传.EnableViewState = true;
                //大图上传.Width = 120;
                //大图上传.Height = 30;
                GridView1.Rows[GridView1.EditIndex].Cells[5].Controls.Add(小图上传);
                GridView1.Rows[GridView1.EditIndex].Cells[6].Controls.Add(大图上传);
                //GridView1.Rows[GridView1.EditIndex].Cells[6].ControlStyle.Height = Unit.Pixel(10);
                //大图上传.Height = 30;
                //Label1.Text = ((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0]).Text;
               // GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0].SkinID.
                 */
            }        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
            {
                GridView1.EditIndex = -1;
                管理商品();
            }        protected void Button1_Click(object sender, EventArgs e)
            {
               
            }
            protected void 商品分类函数(object sender, EventArgs e)
            {
                Label1.Text = "1111";
            }
            protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                DropDownList 商品分类 = (DropDownList)GridView1.FindControl("商品分类"); 
               
                Label1.Text=商品分类.SelectedValue.ToString();
                //Label1.Text = GridView1.Rows[e.RowIndex].Cells[8].Text;
                //管理商品();
                
            }
            protected void 商品分类_SelectedIndexChanged(object sender, EventArgs e)
            {            DropDownList 商品分类 = (DropDownList)sender;           Label1.Text = 商品分类.SelectedItem.ToString();            
            }
        }
    }编辑时:
    点更新时: