<EditItemTemplate>
<mbcbb:ComboBox id=ComboBox2 runat="server" Width="104px"></mbcbb:ComboBox>
</EditItemTemplate>
-----------以上是datagrid模板列的ComboBox控件,此控件类似于dropdownlist既可输入文字又有下拉列表.
-----------下面是后以代码:
                 protected MetaBuilders.WebControls.ComboBox ComboBox1;
protected System.Web.UI.WebControls.DataGrid DGzb;       private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
BindBjzbData();
}
}
private void BindBjzbData() //用于绑定datagrid
{
SqlConnection myCon = new SqlConnection(DB.dbOms.conStrW);
String cmdTxt="select * from bjzb3";
SqlDataAdapter sda=new SqlDataAdapter(cmdTxt,myCon);
myCon.Open();
DataSet ds=new DataSet();
sda.Fill(ds,"bjzb3");
this.DGzb.DataKeyField="id";
this.DGzb.DataSource=ds.Tables["bjzb3"];
this.DGzb.DataBind();
myCon.Close(); }
//===========datagrid的temDataBound事件
private void DGzb_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
((LinkButton)(e.Item.Cells[16].Controls[0])).Attributes.Add("onclick","return confirm('你确认删除吗?')");
//---------------------下面代码是用于绑定datagrid中的ComboBox控件
Label t=(System.Web.UI.WebControls.Label)e.Item.FindControl("label1"); SqlConnection myCon = new SqlConnection(DB.dbOms.conStrW);
String cmdTxt="select * from bjzb3";
SqlDataAdapter sda2=new SqlDataAdapter(cmdTxt,myCon);
myCon.Open();
DataSet ds=new DataSet();
sda2.Fill(ds,"tab");
MetaBuilders.WebControls.ComboBox ddl=(MetaBuilders.WebControls.ComboBox)e.Item.FindControl("ComboBox2");
ddl.DataSource=ds.Tables["tab"].DefaultView;
ddl.DataTextField="型号";
ddl.DataValueField="id";
ddl.DataBind();
//ddl.Items.Insert(0,new ListItem(t.txt,""));
//ddl.SelectedIndex=ddl.Items.IndexOf(ddl.Items.FindByValue(t.Text));
myCon.Close(); }
}
//================运行时出现以下错误!
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 131: sda2.Fill(ds,"tab");
行 132: MetaBuilders.WebControls.ComboBox ddl=(MetaBuilders.WebControls.ComboBox)e.Item.FindControl("ComboBox2");
行 133: ddl.DataSource=ds.Tables["tab"].DefaultView;   //-----错误行
行 134: ddl.DataTextField="型号";
行 135: ddl.DataValueField="id";
 //==============我将绑定datagrid中的ComboBox控件的代码放到编辑事件里(DGzb_EditCommand)也会出现同样的问题!
//===========我查过许多相关"在DataGrid1中如何绑定DropDownList项"的资料,一直没有解决这个问题!急死我了,请高手多多指点!

解决方案 »

  1.   

    是少一个条件吧
    (e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.EditItem||e.Item.ItemType==ListItemType.AlternatingItem)
      

  2.   

    类似
    Label t=(System.Web.UI.WebControls.Label)e.Item.FindControl("label1");
    if(t != null)
    {
    ....
    }
      

  3.   

    我觉得问题应该是出现在绑定comboBox的时候,还有可能就是在做了编辑以后,页面恢复,这时候comboBox是不存在的.我把绑定单独写了一个绑定的过程,然后在编辑,更新,ItemDataBound三个事件里都调用还是没有成功,谢谢上面的朋友!
      

  4.   

    因为ComboBox2是在编辑时才有的,所以:
    if(e.Item.ItemType == ListItemType.EditItem)
    {
        MetaBuilders.WebControls.ComboBox ddl=(MetaBuilders.WebControls.ComboBox)e.Item.FindControl("ComboBox2");
    }