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上时却提示未将对象引用设置到对象的实例。
{
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上时却提示未将对象引用设置到对象的实例。
可能是ds填充失败!
查看ds是否有数据。
{
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();
}
}
DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");
里的dstUserLevel是否能够正确的获取到?LZ试试Step Over看看里有没有内容。
-------------------
LZ的这一句
DropDownList mydp = (DropDownList)e.Item.Cells[3].FindControl("dstUserLevel");
里的dstUserLevel是否能够正确的获取到?LZ试试Step Over看看里有没有内容。
----------
我回去试试。谢了
-------------------
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
这个是有数据的.
我是楼主
-------------------
前台也贴出来:
<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>
这一行的id="DropDownList1" 改成 id="dstUserLevel"
这一行的id="DropDownList1" 改成 id="dstUserLevel"
----------------
sorry 不好意思.是我昨天晚上改dstUserLevel--DropDownList1不是这个问题.
{
.......
}
{
.......
}
----------
好,我回去试试
改成这样就可以了if(e.Item.ItemType==ListItemType.EditItem)为什么呢?