private void DGUser_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemIndex>=0)
{
DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");
OleDbConnection conn =  EstClass.CreateConnection();
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("select levelid,levelname from estjibie order by sortid",conn);
DataSet ds = new DataSet();
da.Fill(ds,"estjibie");
mydp.DataSource = ds.Tables["estjibie"].DefaultView; //这里出错异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
mydp.DataValueField = "levelid";
mydp.DataTextField ="levelname";
mydp.DataBind();
conn.Close();
conn.Dispose();
da.Dispose();
ds.Dispose();
mydp.SelectedValue = e.Item.Cells[3].Text;
}
}
------------------
同样的代码在页面上的DropDownList都可以.但是用在DataGrid中的模板列上的DropDownList上时却提示未将对象引用设置到对象的实例。

解决方案 »

  1.   

    确定的dropdownlist的列序数是正确的(就算是它前面有隐藏列也应该算在内),其次你得确定ds有estjibie表的存在
      

  2.   

    ds.Tables["estjibie"].DefaultView
    可能是ds填充失败!
    查看ds是否有数据。
      

  3.   

    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
    {
    DropDownList ddl = (DropDownList)e.Item.FindControl("DropDownList2");
    ddl.DataSource = this.GetDataSet();
    ddl.DataTextField = "Entryname";
    ddl.DataValueField = "Entryid";
    ddl.DataBind();
    }
    }
      

  4.   

    LZ的这一句
    DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");
    里的dstUserLevel是否能够正确的获取到?LZ试试Step Over看看里有没有内容。
      

  5.   

    我是楼主
    -------------------
    LZ的这一句
    DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");
    里的dstUserLevel是否能够正确的获取到?LZ试试Step Over看看里有没有内容。
    ----------
    我回去试试。谢了
      

  6.   

    我是楼主
    -------------------
    DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");

    DropDownList mydp = (DropDownList)e.Item.FindControl("dstUserLevel");
    我都试过了.
    FindControl("dstUserLevel")没有取到对象.--------------
    jc15271149(嘿咻) : 改了
    if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==istItemType.AlternatingItem)也不行
    -----------------
    ds.Tables["estjibie"].DefaultView
    这个是有数据的.
      

  7.   


    我是楼主
    -------------------
    前台也贴出来:
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体"></FONT><FONT face="宋体"></FONT><FONT face="宋体"></FONT><FONT face="宋体">
    </FONT><FONT face="宋体"></FONT><FONT face="宋体"></FONT><FONT face="宋体"></FONT><FONT face="宋体">
    </FONT><FONT face="宋体"></FONT><FONT face="宋体"></FONT><FONT face="宋体"></FONT>
    <br>
    <br>
    <TABLE id="Table1" style="WIDTH: 488px; HEIGHT: 200px" cellSpacing="0" cellPadding="0"
    border="0">
    <TR>
    <TD style="HEIGHT: 17px"><FONT face="宋体">当前用户:</FONT></TD>
    </TR>
    <TR>
    <TD><asp:datagrid id="DGUser" runat="server" Width="568px" AutoGenerateColumns="False" Height="32px">
    <Columns>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="操作" CancelText="取消" EditText="编辑">
    <HeaderStyle Width="80px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    </asp:EditCommandColumn>
    <asp:TemplateColumn HeaderText="用户ID">
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:Label id=Label3 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.userid") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtUid runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.userid") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="用户名">
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.username") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtUName runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.username") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="用户级别">
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:Label id=Label5 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.levelid") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server" Width="106px"></asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Email">
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:Label id=Label4 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.email") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtUemail runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.email") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="排序">
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:Label id=Label2 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sortid") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtUSortid runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sortid") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid></TD>
    </TR>
    </TABLE>
    </form>
      

  8.   

    把<asp:DropDownList id="DropDownList1" runat="server" Width="106px"></asp:DropDownList>
    这一行的id="DropDownList1" 改成 id="dstUserLevel"
      

  9.   

    把<asp:DropDownList id="DropDownList1" runat="server" Width="106px"></asp:DropDownList>
    这一行的id="DropDownList1" 改成 id="dstUserLevel"
    ----------------
    sorry 不好意思.是我昨天晚上改dstUserLevel--DropDownList1不是这个问题.
      

  10.   

    if(e.Item.ItemType==ListItemType.EditItem)
    {
    .......
    }
      

  11.   

    if(e.Item.ItemType==ListItemType.EditItem)
    {
    .......
    }
    ----------
    好,我回去试试
      

  12.   

    哈哈.
    改成这样就可以了if(e.Item.ItemType==ListItemType.EditItem)为什么呢?