如何在DataGrid中内嵌入droplist? 我已经实现了点击每一行的edit按钮,每个数据项就变成HeadText,可以输入修改的内容。我想做得更好一些,例如某一个数据项引用到其他的数据项,我想把它变成droplist下拉菜单,显示我要选择的引用的内容。如何做到? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考一下:前台:<EditItemTemplate> <asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'> </asp:DropDownList> </EditItemTemplate>后台:protected DataSet GetSource(){ return [数据集];} 在datagrid里面添加一个模板列,然后编辑这个模板列,添加一个drplist。 前台:<EditItemTemplate> <asp:DropDownList DataTextField="mc" DataValueField="lsh" id=List1runat="server" Width="100%" > </asp:DropDownList></EditItemTemplate>后台代码:private void Datagrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { DropDownList list=(DropDownList)e.Item.FindControl("List1"); if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item ) { SqlDataAdapter da=new SqlDataAdapter(SQL语句,连接字符串); DataSet ds=new DataSet(); da.Fill(ds); list.DataSource=ds.Tables[0]; list.DataTextField="引用的数据项在数据表中的列名" list.DataBind(); } 前台<P><asp:datagrid id="DataGrid1" runat="server" GridLines="None" CellPadding="3" BackColor="White"BorderWidth="2px" CellSpacing="1" AutoGenerateColumns="False" DataKeyField="comKey" BorderStyle="Ridge"BorderColor="White" Width="176px"><SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle><ItemStyle ForeColor="Black" CssClass="item" BackColor="#DEDFDE"></ItemStyle><HeaderStyle Font-Bold="True" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle><FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle><Columns><asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn> <asp:ButtonColumn Text="Delete" ButtonType="PushButton" CommandName="Delete"></asp:ButtonColumn><asp:TemplateColumn HeaderText="StaffID"><ItemTemplate><%# DataBinder.Eval(Container.DataItem,"StaffID") %></ItemTemplate><EditItemTemplate><asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList></EditItemTemplate></asp:TemplateColumn><asp:BoundColumn DataField="UnitCode" HeaderText="UnitCode"></asp:BoundColumn><asp:BoundColumn DataField="Year" HeaderText="Year"></asp:BoundColumn><asp:BoundColumn DataField="Semester" HeaderText="Semester"></asp:BoundColumn></Columns><PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle></asp:datagrid>后台:private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){ OleDbConnection conn = new OleDbConnection();conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb";string mySelectQuery = "select StaffID from Staff";OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn);DataSet ds = new DataSet();da.Fill(ds,"Staff");DropDownList list = (DropDownList)e.Item.FindControl("DropDownList1");list.DataSource=ds.Tables["Staff"];list.DataTextField="StaffID";list.DataValueField="StaffID";list.DataBind();list.Items.Insert(0,new ListItem("Please Select",""));}运行结果错误出在这句话list.DataSource=ds.Tables["Staff"];错误原因是Object reference not set to an instance of an object 难道系统找不到list是什么?就是说找不到DropDownList1??? 那是,因为你要使用DropDownList必须先this.DataGrid1.EditItemIndex = e.Item.ItemIndex;//让DataGrid处于编辑状态你可以尝试用我的方法啊,我都用的好好的啊 唉,还是不行啊。怎么回事啊。我快疯掉了。我觉得这个ASP版本很有问题。To Stoneallen():你的代码不知道呢,很奇怪,运行以后就出现parser error,解析不了你的<asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'> 我通过Debug跟踪,发现DropDownList list = (DropDownList)e.Item.FindControl("DropDownList1");这句根本没有找到DropDownList1那个控件,你觉得这问题出在哪里?太奇怪了。 前台:<asp:DropDownList DataTextField="StaffID" DataValueField="StaffID" DataSource='<%# GetSource() %>' id=DropDownList1 runat="server" Width="100%">后台:protected DataSet GetSource(){ OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb"; string mySelectQuery = "select StaffID from Staff"; OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn); DataSet ds = new DataSet(); da.Fill(ds,"Staff"); return ds;}这样不行吗? jquery主要是用来做什么的? 求一个正则。。 asp.net 帖子隐藏功能 水晶报表 XI R2 下载后能内嵌到VS.NET 2003 中吗? C#和Javascript速度 DataList显示楼层的问题... 经常需要在存有几万条记录的DataTable中筛选出几十/几百条DataRow,该如何提高效率? ASP.net中的javascript无法执行 access奇怪的更新语句,在线等! 新手,急需帮助! 如何让下拉框在动态加载选项时让某些项满足一定条件时变色??? 求上传图片的代码
前台:
<EditItemTemplate>
<asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'>
</asp:DropDownList>
</EditItemTemplate>
后台:
protected DataSet GetSource()
{
return [数据集];
}
<EditItemTemplate>
<asp:DropDownList DataTextField="mc" DataValueField="lsh" id=List1
runat="server" Width="100%" > </asp:DropDownList>
</EditItemTemplate>
后台代码:
private void Datagrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList list=(DropDownList)e.Item.FindControl("List1");
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item )
{
SqlDataAdapter da=new SqlDataAdapter(SQL语句,连接字符串);
DataSet ds=new DataSet();
da.Fill(ds);
list.DataSource=ds.Tables[0];
list.DataTextField="引用的数据项在数据表中的列名"
list.DataBind();
}
<P><asp:datagrid id="DataGrid1" runat="server" GridLines="None" CellPadding="3" BackColor="White"BorderWidth="2px" CellSpacing="1" AutoGenerateColumns="False" DataKeyField="comKey" BorderStyle="Ridge"BorderColor="White" Width="176px">
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
<ItemStyle ForeColor="Black" CssClass="item" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
<FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
<Columns>
<asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn>
<asp:ButtonColumn Text="Delete" ButtonType="PushButton" CommandName="Delete"></asp:ButtonColumn>
<asp:TemplateColumn HeaderText="StaffID">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"StaffID") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="UnitCode" HeaderText="UnitCode"></asp:BoundColumn>
<asp:BoundColumn DataField="Year" HeaderText="Year"></asp:BoundColumn>
<asp:BoundColumn DataField="Semester" HeaderText="Semester"></asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle>
</asp:datagrid>
后台:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
OleDbConnection conn = new OleDbConnection();conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb";string mySelectQuery = "select StaffID from Staff";
OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn);DataSet ds = new DataSet();
da.Fill(ds,"Staff");
DropDownList list = (DropDownList)e.Item.FindControl("DropDownList1");
list.DataSource=ds.Tables["Staff"];
list.DataTextField="StaffID";
list.DataValueField="StaffID";
list.DataBind();
list.Items.Insert(0,new ListItem("Please Select",""));
}
运行结果错误出在这句话
list.DataSource=ds.Tables["Staff"];
错误原因是Object reference not set to an instance of an object
this.DataGrid1.EditItemIndex = e.Item.ItemIndex;//让DataGrid处于编辑状态
你可以尝试用我的方法啊,我都用的好好的啊
To Stoneallen():你的代码不知道呢,很奇怪,运行以后就出现parser error,解析不了你的<asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'>
这句根本没有找到DropDownList1那个控件,你觉得这问题出在哪里?太奇怪了。
<asp:DropDownList DataTextField="StaffID" DataValueField="StaffID" DataSource='<%# GetSource() %>' id=DropDownList1 runat="server" Width="100%">
后台:
protected DataSet GetSource()
{
OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb"; string mySelectQuery = "select StaffID from Staff";
OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn); DataSet ds = new DataSet();
da.Fill(ds,"Staff"); return ds;
}
这样不行吗?