在模板列中:设置一个label为 正常模式 用来显示当前用户的身份,并且设置其值为:
<asp:Label id="Label2" runat="server" CssClass="l12x">
<%# DataBinder.Eval(Container.DataItem,"systemUser_name") %>
</asp:Label>OK了 在运行的时候可以很好的显示systemUser_name字段但是在"编辑列"中加了一个DropDownList 希望可以修改用户的身份问!!:如何对这个"编辑列"中的DropDownList进行数据绑定???
<asp:Label id="Label2" runat="server" CssClass="l12x">
<%# DataBinder.Eval(Container.DataItem,"systemUser_name") %>
</asp:Label>OK了 在运行的时候可以很好的显示systemUser_name字段但是在"编辑列"中加了一个DropDownList 希望可以修改用户的身份问!!:如何对这个"编辑列"中的DropDownList进行数据绑定???
要给它的text和value分别赋值
If e.Item.ItemType = ListItemType.EditItem Then
Dim ddllist As DropDownList
ddllist = e.Item.Cells(2).FindControl("dropdownlistName")
'對dropdownlist操作
End If
前台<asp:DataGrid AutoGenerateColumns="False" ID="MyDataGrid" Runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:DropDownList ID="DDL1" Runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>后台public class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid MyDataGrid;
public Hashtable HS=new Hashtable();
private void Page_Load(object sender, System.EventArgs e)
{
HS.Add("0","值1");
HS.Add("1","值2");
HS.Add("2","值3");
HS.Add("3","值4");
MyDataGrid.DataSource=HS;
MyDataGrid.DataBind();
}//绑定部分
private void MyDataGrid_ItemDataBound(object sender,DataGridItemEventArgs e)
{
if(e.Item.ItemIndex>=0 && e.Item.ItemIndex!=-1)
{
((DropDownList)e.Item.FindControl("DDL1")).DataSource=HS;
((DropDownList)e.Item.FindControl("DDL1")).DataTextField="Value";
((DropDownList)e.Item.FindControl("DDL1")).DataBind();
}
}private void InitializeComponent()
{
this.MyDataGrid.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.MyDataGrid_ItemDataBound); //注意这里
this.Load += new System.EventHandler(this.Page_Load);}
}
}
{
if(e.Item.ItemIndex<0) return; if(e.Item.ItemIndex==DataGrid1.EditItemIndex)
{
DataSet seDS=new DataSet();
SystemUserData userData=new SystemUserData();
seDS=userData.getAllSystemUser(); ((DropDownList)e.Item.Cells[3].Controls[1]).DataSource=seDS.Tables[0].DefaultView;
((DropDownList)e.Item.Cells[3].Controls[1]).DataTextField="systemUser_name";
((DropDownList)e.Item.Cells[3].Controls[1]).DataSource="systemUser_id";
((DropDownList)e.Item.Cells[3].Controls[1]).DataBind(); }
}
HTML中DG的编辑列为:
<EditItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server" idth="80px">
</asp:DropDownList>
</EditItemTemplate>
这一行报错:((DropDownList)e.Item.Cells[3].Controls[1]).DataBind();
但是报错()-------------------------------------------------------------------求救DataBinder.Eval:“System.Char”不包含名称为 systemUser_name 的属性。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: DataBinder.Eval:“System.Char”不包含名称为 systemUser_name 的属性。源错误:
行 85: ((DropDownList)e.Item.Cells[3].Controls[1]).DataTextField="systemUser_name";
行 86: ((DropDownList)e.Item.Cells[3].Controls[1]).DataSource="systemUser_id";
行 87: ((DropDownList)e.Item.Cells[3].Controls[1]).DataBind();
行 88:
行 89: ((TextBox)e.Item.Cells[1].Controls[0]).Width=60;
private void MyDataGrid_ItemDataBound(object sender,DataGridItemEventArgs e)
{
if(e.Item.ItemIndex>=0 && e.Item.ItemIndex!=-1)
{
if(MyDataGrid.EditItemIndex==e.Item.ItemIndex)
{
((DropDownList)e.Item.FindControl("DDL")).DataSource=HS;
((DropDownList)e.Item.FindControl("DDL")).DataTextField="Value";
((DropDownList)e.Item.FindControl("DDL")).DataBind();
}
}
}如果还是解决不了就下载下边的那个示例自己看看代码,唉。。命苦,帮你做一个例子。
http://www.sky-asp.net/Testing.rar
我用hashtable只不过是因为用它方便一些。。就报错:DataBinder.Eval:“System.Char”不包含名称为 systemUser_name 的属性。看看你sql语句中的查寻的字段名和
DataTextField及DataValeField是不是不一至
((DropDownList)e.Item.Cells[3].Controls[1]).DataSource=seDS.Tables[0].DefaultView;
((DropDownList)e.Item.Cells[3].Controls[1]).DataTextField="systemUser_name";
((DropDownList)e.Item.Cells[3].Controls[1]).DataSource="systemUser_id";//这里错了:]
((DropDownList)e.Item.Cells[3].Controls[1]).DataBind();应该是
((DropDownList)e.Item.Cells[3].Controls[1]).DataValueField="systemUser_id"
而不是
((DropDownList)e.Item.Cells[3].Controls[1]).DataSource="systemUser_id"
我倒
((DropDownList)e.Item.Cells[3].Controls[1]).DataSource=seDS.Tables[0].DefaultView;
((DropDownList)e.Item.Cells[3].Controls[1]).DataTextField="systemUser_name";
((DropDownList)e.Item.Cells[3].Controls[1]).DataValueField="systemUser_id";
((DropDownList)e.Item.Cells[3].Controls[1]).DataBind();
((DropDownList)e.Item.Cells[3].Controls[1]).Items.FindByValue("ttt").Selected=true;//注意这里执行这一句时:
((DropDownList)e.Item.Cells[3].Controls[1]).Items.FindByValue("ttt").Selected=true报错-------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 88:((DropDownList)e.Item.Cells[3].Controls[1]).DataValueField="systemUser_id";
行 89:((DropDownList)e.Item.Cells[3].Controls[1]).DataBind();
行 90:((DropDownList)e.Item.Cells[3].Controls[1]).Items.FindByValue("ttt").Selected=true;
行 91:
行 92:((TextBox)e.Item.Cells[1].Controls[0]).Width=60;
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:DropDownList ID="DDL1" Runat="server" datasource=<%GetDataSet()%>></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>.cs中:
public DataSet GetDataSet()
{
DataSet ds;
//取值填充到DatSet
return ds;
}