我在DataGrid 中嵌套一个DropDownList.DropDownList的数据从数据库中提取的.程序如下:
private void DataGrid2_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
Person.DataSource = d.DataView(sql,conn);
Person.DataTextField = "name";
Person.DataBind();
}
为什么程序运行后DropDownList是为空的呢?

解决方案 »

  1.   

    有一个事件代表的当grid的每行数据被绑定上的时候触发的
    具体是什么忘记了
      

  2.   

    d.DataView(sql,conn); 你看看这个能不能取到值啊
      

  3.   

    d.DataView(sql,conn); 是可以取出值的..
    我在DataGrid外加了一个DropDownList.都可以取出值的.
    不过另外这个值取出来有"|",如"大学|初中|高中|".这样的值又如何去掉"|"呢?
      

  4.   

    现在有两个问题:
    1、DataGrid中的DropDownList从数据库中取不出来数据。
    2、要是取出来的数据都是"大学|初中|高中|"这样的。如何拆分“|”;
      

  5.   

    应该加在DataGrid2_ItemDataBind()事件中。是先创建控件,再绑定数据
      

  6.   

    1
    确认数据取到后你response.write一下看看,然后在Person.DataValueField = "name";运行后查看一下源代码
    2
    用split分割,如果直接去除的话直接str=str.replace("|","")
      

  7.   

    楼上的师兄.
    我开始也是把程序写在DataGrid2_ItemDataBind()里的.一样不行.
      

  8.   

    if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
    {
       DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
       Person.DataSource = d.DataView(sql,conn);
       Person.DataTextField = "name";
       Person.DataBind();
    }
    楼主看下可不可以了
      

  9.   

    private void DataGrid2_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
    {DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
    Person.DataSource = d.DataView(sql,conn);
    Person.DataTextField = "name";Person.DataBind();
    }
    }
      

  10.   

    在生成datagrid之前先把dropdownlist的项取出来,放在数组中
    然后在itemcreate的时候把数组绑定到dropdownlist中
      

  11.   

    sleepcraft(越学越不懂)..
    你能不能举个例啊..我大概知道一点,但老是提示"未将对象初始化"
      

  12.   

    to:LZ
    你的写法 我没有实现  我觉得 是这句话的问题 
    DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );我用下面的方法实现的 你可以参考以下
    private void Page_Load(object sender, System.EventArgs e)
    {
       W_Details w_Details = new W_Details(); 
       DataTable dt_M_Form_Operation = w_Details.get_M_Form_Operation(operation_level);
    //根据从数据表中査取的値給DataGrid中的DropDownList控件設置缺省値
    for(int i = 0;i<dt_M_Form_Operation.Rows.Count;i++)
    {
    //荻取DataGrid中的DropDownList控件
    DropDownList ddlDefault = (DropDownList)this.dgLeft.Items[i].Cells[0].Controls[1];
    string form_attribute = dt_M_Form_Operation.Rows[i][1].ToString(); switch(form_attribute)
    {
    case "1" : 
    ddlDefault.SelectedIndex = 1;
    break;
    case "2" : 
    ddlDefault.SelectedIndex = 2;
    break;
    default  : 
    ddlDefault.SelectedIndex = 0;
    break;
    }
    }
    }
    private void dgLeft_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    //初始化DataGrid控件中的DropDownList
    if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
    {
    DropDownList ddl = (DropDownList)e.Item.FindControl("ddlSort");
    ddl.Items.Insert(0,"未設定");
    ddl.Items.Insert(1,"参照のみ");
    ddl.Items.Insert(2,"参照&#12539;更新");
    }
    }
      

  13.   

    加在DataGrid2_ItemDataBind()事件中
      

  14.   

    www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看www.duhaha.com 一些好玩的东西,大家来看看
      

  15.   

    以前遇到过,没工具测试,也忘记是怎么写的了.
    DropDownList ddl = (DropDownList)e.Items[dg.DataKeys[e.Items.ItemIndex]].FindControl("ddl");大概好像是这样写的,哈哈,新手不要见怪
      

  16.   

    DropDownList ddl = (DropDownList)e.Items[e.Items.ItemIndex].FindControl("ddl");
      

  17.   

    DropDownList ddl = (DropDownList)e.Items[e.Items.ItemIndex].FindControl("ddl");
      

  18.   

    在DataGrid2_ItemDataBind()事件中if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
    {
    DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
    Person.DataSource = d.DataView(sql,conn);
    Person.DataTextField = "name";Person.DataBind();
    }
      

  19.   

    我把以前写的代码给你看看,希望对你有用,不过我觉得是应该写在DataGrid1_ItemDataBound里的:
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
      {
       SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
       SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn);
       DataSet ds=new DataSet();
       da.Fill(ds,"table1");
       if(e.Item.ItemType==ListItemType.EditItem)
       {
        DropDownList ddl=(DropDownList)e.Item.FindControl("dep");
        ddl.DataSource=ds.Tables["table1"];
        ddl.DataTextField="depname";
        ddl.DataValueField="depid";
        ddl.DataBind();
        ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true;//选择数据库内的作为默认
       }
      }
      

  20.   

    补充下:
    ItemCreated是创建控件时发生的
    ItemDataBound是绑定数据时发生的,明白了吧
      

  21.   

    应该放在ItemDataBound里面。
    DropDownList DDL= (DropDownList)e.Item.FindControl("ID");
    建立一个SqlDataReader,然后
    while (dr.Read())
            {
                DDL.Items.Add(new ListItem(dr["字段名"].ToString(), dr["字段值"].ToString()));
            }
      

  22.   


    if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
    交替项和正常项
      

  23.   


    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    CheckBox ckTemp=(CheckBox)e.Item.Cells[列index].FindControl("Person");}
      

  24.   

    CheckBox ckTemp=(CheckBox)e.Item.Cells[列index].FindControl("Person");
    改为
    DropDownList Person=(DropDownList)e.Item.Cells[列index].FindControl("Person");
      

  25.   

    不光在ItemCreated事件里写.还要在ItemBound事件里写
    ItemCreated只是创建表格.另一个才向里面填充数据.
      

  26.   

    补充一句,如果你只想向DDL里填充信息的话,只需要把你写的那段代码放ItemBound事件里就可以
    我刚才说的可以实现省份跟城市的联动,不过要写个SelectIndexChanged事件
      

  27.   

    首先,在ItemDataBound里面用sqldatareader循环填充dropdownlist是可以的,但是问题是如果数据量大话呢?比如有1000条记录,那等于你生成一个datagrid要进行1000次数据库连接
    其次使用数组绑定的话只要在ItemCreated或ItemBound里填充一次就可以了比如,你在datagrid生成前先生成"大学|初中|高中|"那么使用splite拆分成一个一维数组,然后在ItemCreated或ItemBound里填充,借i0876(口天吴)的例子一用
    DDL.Items.Add(new ListItem(dr["字段名"].ToString(), dr["字段值"].ToString()));