我在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是为空的呢?
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是为空的呢?
具体是什么忘记了
我在DataGrid外加了一个DropDownList.都可以取出值的.
不过另外这个值取出来有"|",如"大学|初中|高中|".这样的值又如何去掉"|"呢?
1、DataGrid中的DropDownList从数据库中取不出来数据。
2、要是取出来的数据都是"大学|初中|高中|"这样的。如何拆分“|”;
确认数据取到后你response.write一下看看,然后在Person.DataValueField = "name";运行后查看一下源代码
2
用split分割,如果直接去除的话直接str=str.replace("|","")
我开始也是把程序写在DataGrid2_ItemDataBind()里的.一样不行.
{
DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
Person.DataSource = d.DataView(sql,conn);
Person.DataTextField = "name";
Person.DataBind();
}
楼主看下可不可以了
{
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();
}
}
然后在itemcreate的时候把数组绑定到dropdownlist中
你能不能举个例啊..我大概知道一点,但老是提示"未将对象初始化"
你的写法 我没有实现 我觉得 是这句话的问题
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,"参照・更新");
}
}
DropDownList ddl = (DropDownList)e.Items[dg.DataKeys[e.Items.ItemIndex]].FindControl("ddl");大概好像是这样写的,哈哈,新手不要见怪
{
DropDownList Person = (DropDownList)e.Item.FindControl( "Person" );
Person.DataSource = d.DataView(sql,conn);
Person.DataTextField = "name";Person.DataBind();
}
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;//选择数据库内的作为默认
}
}
ItemCreated是创建控件时发生的
ItemDataBound是绑定数据时发生的,明白了吧
DropDownList DDL= (DropDownList)e.Item.FindControl("ID");
建立一个SqlDataReader,然后
while (dr.Read())
{
DDL.Items.Add(new ListItem(dr["字段名"].ToString(), dr["字段值"].ToString()));
}
if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
交替项和正常项
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
CheckBox ckTemp=(CheckBox)e.Item.Cells[列index].FindControl("Person");}
改为
DropDownList Person=(DropDownList)e.Item.Cells[列index].FindControl("Person");
ItemCreated只是创建表格.另一个才向里面填充数据.
我刚才说的可以实现省份跟城市的联动,不过要写个SelectIndexChanged事件
其次使用数组绑定的话只要在ItemCreated或ItemBound里填充一次就可以了比如,你在datagrid生成前先生成"大学|初中|高中|"那么使用splite拆分成一个一维数组,然后在ItemCreated或ItemBound里填充,借i0876(口天吴)的例子一用
DDL.Items.Add(new ListItem(dr["字段名"].ToString(), dr["字段值"].ToString()));