GridView 标头放DropDownList 如何在GridView 标头放DropDownList,选择显示不同的列? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建模板列。。把DropDownList拖进去么 一定要放在GridView 标头嗎?就放在GridView 上面不行嗎? 后台在rowdatabound中,也可以访问到gridview的head row,可以动态增删他的子控件 标头。。在RowDataBound中//如果是标头if (e.Row.RowType == DataControlRowType.Header){ e.Row.Cells[0].Text = "<select><option>请选择</option></select>";//在第一列放入一个下来菜单} 做过两个gridview嵌套的东西,建议不要放在 页眉或页脚上。涉及到页面回发与事件的问题 http://topic.csdn.net/t/20060420/10/4700258.html 放表格上面,然后把GridView的ShowHeader设为false就行了,道理是一样的。至于显示不同的列?这个可以使用DropDownList将列名作为参数传递到GridView控件使用的数据源,提取相应信息即可。 表头加入DropDownList参考: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Samples_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> <script language="javascript" type="text/javascript"> function test(ddlst) { var selectedType = ddlst.value; var gridTable = document.getElementById("GridView1") var i; for(i=1;i<gridTable.rows.length;i++) { var curRow = gridTable.rows[i]; var curType = curRow.cells[1].innerText; if(curType == selectedType || selectedType == "ALL") curRow.style.display = "inline"; else curRow.style.display = "none"; } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCreated="GridView1_RowCreated"> <Columns> <asp:BoundField DataField="field1" HeaderText="id" ReadOnly="True" SortExpression="field1" /> <asp:TemplateField> <HeaderTemplate> <asp:DropDownList ID="DropDownList1" runat="server" Width="87px" > <asp:ListItem Value="ALL">ALL</asp:ListItem> <asp:ListItem>AAA</asp:ListItem> <asp:ListItem>BBB</asp:ListItem> <asp:ListItem>CCC</asp:ListItem> </asp:DropDownList> </HeaderTemplate> <ItemTemplate><%# Eval("field2")%></ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="field3" HeaderText="re" ReadOnly="True" SortExpression="field3" /> </Columns> </asp:GridView> </div> </form> </body> </html> ============== public partial class Samples_Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } private void BindData()//这里只是模拟一些测试数据 { DataTable dt = new DataTable(); dt.Columns.Add("Field1"); dt.Columns.Add("Field2"); dt.Columns.Add("Field3"); System.Random rd = new Random(); for (int i = 1; i < 30; i++) { int tmp = rd.Next(99999); int rem = 0; Math.DivRem(tmp, 3, out rem); if(rem == 0) dt.Rows.Add(new object[] { i,"AAA",tmp}); else if (rem == 1) dt.Rows.Add(new object[] { i, "BBB", tmp }); else if (rem == 2) dt.Rows.Add(new object[] { i, "CCC", tmp }); } dt.AcceptChanges(); this.GridView1.DataSource = dt; this.GridView1.DataBind(); } protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { DropDownList ddlst = e.Row.FindControl("DropDownList1") as DropDownList; ddlst.Attributes.Add("onchange","test(this);"); } } } *********************************** 如果有翻页,例如一共有100条数据,每页显示20条,耍选时希望每页也显示20条符合条件的数据,那么更简单,这样写就可以了 <asp:TemplateField> <HeaderTemplate> <asp:DropDownList ID="DropDownList1" runat="server" Width="87px" AutoPostBack="True" > <asp:ListItem Value="ALL">ALL</asp:ListItem> <asp:ListItem>AAA</asp:ListItem> <asp:ListItem>BBB</asp:ListItem> <asp:ListItem>CCC</asp:ListItem> </asp:DropDownList> </HeaderTemplate> <ItemTemplate><%# Eval("field2")%></ItemTemplate> </asp:TemplateField> protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { DropDownList ddlst = e.Row.FindControl("DropDownList1") as DropDownList; ddlst.Attributes.Add("onchange","test(this);"); ddlst.SelectedIndexChanged += new EventHandler(ddlst_SelectedIndexChanged); } } void ddlst_SelectedIndexChanged(object sender, EventArgs e) { //在这里对数据源进行筛选并且重新绑定到GridView1 } DropDownList放上了,不知道怎么取值 <asp:TemplateField> <HeaderTemplate> <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Value="u_update">更新日期</asp:ListItem> <asp:ListItem Value="u_regtime">注册日期</asp:ListItem> </asp:DropDownList> </HeaderTemplate> <ItemTemplate> </ItemTemplate> </asp:TemplateField> DropDownList1_SelectedIndexChanged里用((DropDownList)sender).SelectedValue.ToString()可以取,可不可以在外面取? 用ViewState保存DropDownList1的值,但是一变改DropDownList1的时候,重新剧新GridView,DropDownList1无法显示到原来的值 你应该多搜索一下再过来问,这样的交流成本很高。www.google.com 这两个方法能组合成一个方法吗 求网站多语言解决方案代码 如何判断文本框中的内容是不是数值 所有的可用分咨询,谁做过Wap开发? 关于datagrid控件 建了个ASP.NET技术交流的群8991506 如何通过页面调用console写的一个exe 使用 DbProviderFactory 访问数据库的问题 大批量数据更新,分享给大家。 用dataset取数据并用datagrid显示,但显示不出来的问题。 周、月、总 排行的数据库如何设计 急 论坛注册中验证码的细节问题
在RowDataBound中//如果是标头
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Text = "<select><option>请选择</option></select>";//在第一列放入一个下来菜单
}
至于显示不同的列?
这个可以使用DropDownList将列名作为参数传递到GridView控件使用的数据源,提取相应信息即可。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script language="javascript" type="text/javascript">
function test(ddlst)
{
var selectedType = ddlst.value;
var gridTable = document.getElementById("GridView1")
var i;
for(i=1;i<gridTable.rows.length;i++)
{
var curRow = gridTable.rows[i];
var curType = curRow.cells[1].innerText;
if(curType == selectedType || selectedType == "ALL")
curRow.style.display = "inline";
else
curRow.style.display = "none";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCreated="GridView1_RowCreated">
<Columns>
<asp:BoundField DataField="field1" HeaderText="id" ReadOnly="True" SortExpression="field1" />
<asp:TemplateField>
<HeaderTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" Width="87px" >
<asp:ListItem Value="ALL">ALL</asp:ListItem>
<asp:ListItem>AAA</asp:ListItem>
<asp:ListItem>BBB</asp:ListItem>
<asp:ListItem>CCC</asp:ListItem>
</asp:DropDownList>
</HeaderTemplate>
<ItemTemplate><%# Eval("field2")%></ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="field3" HeaderText="re" ReadOnly="True" SortExpression="field3" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
==============
public partial class Samples_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
private void BindData()//这里只是模拟一些测试数据
{
DataTable dt = new DataTable();
dt.Columns.Add("Field1");
dt.Columns.Add("Field2");
dt.Columns.Add("Field3");
System.Random rd = new Random();
for (int i = 1; i < 30; i++)
{
int tmp = rd.Next(99999);
int rem = 0;
Math.DivRem(tmp, 3, out rem);
if(rem == 0) dt.Rows.Add(new object[] { i,"AAA",tmp});
else if (rem == 1) dt.Rows.Add(new object[] { i, "BBB", tmp });
else if (rem == 2) dt.Rows.Add(new object[] { i, "CCC", tmp });
}
dt.AcceptChanges();
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
DropDownList ddlst = e.Row.FindControl("DropDownList1") as DropDownList;
ddlst.Attributes.Add("onchange","test(this);");
}
}
}
***********************************
如果有翻页,例如一共有100条数据,每页显示20条,耍选时希望每页也显示20条符合条件的数据,那么更简单,这样写就可以了
<asp:TemplateField>
<HeaderTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" Width="87px" AutoPostBack="True" >
<asp:ListItem Value="ALL">ALL</asp:ListItem>
<asp:ListItem>AAA</asp:ListItem>
<asp:ListItem>BBB</asp:ListItem>
<asp:ListItem>CCC</asp:ListItem>
</asp:DropDownList>
</HeaderTemplate>
<ItemTemplate><%# Eval("field2")%></ItemTemplate> </asp:TemplateField>
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
DropDownList ddlst = e.Row.FindControl("DropDownList1") as DropDownList;
ddlst.Attributes.Add("onchange","test(this);");
ddlst.SelectedIndexChanged += new EventHandler(ddlst_SelectedIndexChanged);
}
}
void ddlst_SelectedIndexChanged(object sender, EventArgs e)
{
//在这里对数据源进行筛选并且重新绑定到GridView1
}
<HeaderTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Value="u_update">更新日期</asp:ListItem>
<asp:ListItem Value="u_regtime">注册日期</asp:ListItem>
</asp:DropDownList>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:TemplateField>