ItemCommand里面写数据库绑定操作不是太好,等于你每多一条记录,就要进行一次数据库连接, 由于你每个dropdownlist里面的item都一样,可以事先取出来,将所有记录组成一个字符串,在itemCommand事件里拆分后添加到dropdownlist里另外出现未处理的异常貌似是由于你用dataset绑定dropdownlist造成的 数据库用sqldatareader取出数据后,循环添加到dropdownlist里面,如下 do while reader.read dropdownlist.item.add(new listitem(reader("id"),reader("name"))) end while
ddl_Depart = (DropDownList)DataGrid1.FindControl("ddl_Depart");while(ddlsdr.Read())
{
ddl_Depart.Items.Add(ddlsdr[0].ToString());
}
ddl_Depart = (DropDownList)DataGrid1.FindControl("ddl_Depart");while(ddlsdr.Read())
{
ddl_Depart.Items.Add(ddlsdr[0].ToString());
}
直接写的,不知道对不对,lz自己看吧
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
SqlConnection ddlconn = new SqlConnection("server=(local);database=北风贸易;uid=sa;pwd=pengsg");
string ddlstr="select distinct address from employee";
SqlDataAdapter sda = new SqlDataAdapter(ddlstr,ddlconn);
ddlconn.Open();
DataSet ds = new DataSet();
sda.Fill(ds,"address");
DataView dv = ds.Tables[0].DefaultView;
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
DropDownList ddl_Depart = ((DropDownList)e.Item.FindControl("ddl_Depart"));
ddl_Depart.DataSource = dv;
ddl_Depart.DataTextField= "";
ddl_Depart.DataValueField = "";
ddl_Depart.DataBind();
}
}
报错信息如下:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 153: {
行 154: DropDownList ddl_Depart = ((DropDownList)e.Item.FindControl("ddl_Depart"));
行 155: ddl_Depart.DataSource = dv;
行 156: ddl_Depart.DataTextField= "";
行 157: ddl_Depart.DataValueField = "";
由于你每个dropdownlist里面的item都一样,可以事先取出来,将所有记录组成一个字符串,在itemCommand事件里拆分后添加到dropdownlist里另外出现未处理的异常貌似是由于你用dataset绑定dropdownlist造成的
数据库用sqldatareader取出数据后,循环添加到dropdownlist里面,如下
do while reader.read
dropdownlist.item.add(new listitem(reader("id"),reader("name")))
end while
((DropDownList)e.Item.FindControl("ddl_Depart"));
也就是你的dataGrid里得有一个名叫ddl_Depart控件..
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList dropTemp;
if(e.Item.ItemType == ListItemType.EditItem)
{
dropTemp = (DropDownList)e.Item.FindControl("DropDownList1");
if(dropTemp != null)
{
//绑定你的dropTemp }
}
}
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 129: DropDownList ddl_Depart = new DropDownList();
行 130: ddl_Depart = (DropDownList)e.Item.FindControl("ddl_Depart");
行 131: ddl_Depart.DataSource = dv;
行 132: ddl_Depart.DataBind();
行 133:
代码如下:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
SqlConnection ddlconn = new SqlConnection("server=(local);database=北风贸易;uid=sa;pwd=pengsg");
string ddlstr="select distinct address from employee";
SqlDataAdapter sda = new SqlDataAdapter(ddlstr,ddlconn);
ddlconn.Open();
DataSet ds = new DataSet();
sda.Fill(ds,"address");
DataView dv = ds.Tables["address"].DefaultView;
DropDownList ddl_Depart;
ddl_Depart = (DropDownList)e.Item.FindControl("ddl_Depart");
if(ddl_Depart != null)
{
ddl_Depart.DataSource = dv;
ddl_Depart.DataBind();
}
}
我要实现的功能就是在DataGrid中单击编辑按扭后,模块列中的DropDownList能绑定到数据源上并取得数据