asp.net 里的Gridview如何在标题头列添加按钮

poptang1 2010-01-16 10:02:14
标题头上想做一个可以用鼠标按的地方,用Sort排序来做是可以,但样子看起来挺别扭,能不能在标题头上放一个按钮上去,按下去选择一整个列的功能。
...全文
525 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
TalesTen 2010-01-17
  • 打赏
  • 举报
回复
不早啦,该休息啦[Quote=引用 4 楼 mngzilin 的回复:]
HTML code<asp:GridViewID="GridView1" runat="server" AutoGenerateColumns=FalseWidth="230px"><Columns><asp:TemplateField><HeaderTemplate><asp:ButtonID="Button1" runat="server" Text="全选" OnClick="Button1?-
[/Quote]
mngzilin 2010-01-17
  • 打赏
  • 举报
回复
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns=False Width="230px">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:Button ID="Button1" runat="server" Text="全选" OnClick="Button1_Click" />
</HeaderTemplate>
<ItemTemplate>
<%#Eval("id") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="title" />
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa","1");
dt.Rows.Add("sdafsa","2");
dt.Rows.Add("sdafsa","3");
dt.Rows.Add("sdafsa","4");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
if (bt.Text == "全选")
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "red");
bt.Text = "取消";
}
else
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "white");
bt.Text = "全选";
}
}
mngzilin 2010-01-17
  • 打赏
  • 举报
回复
你自己复制吧。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa", "1");
dt.Rows.Add("sdafsa", "2");
dt.Rows.Add("sdafsa", "3");
dt.Rows.Add("sdafsa", "4");
GridView1.DataSource = dt;
GridView1.DataBind();
}
Button bt = new Button();
bt.ID = "bt1";
bt.Text = "测试";
bt.CommandArgument = "1";
bt.Click += new EventHandler(bt_Click);
GridView1.HeaderRow.Cells[1].Controls.Add(bt);
}
protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//Button bt = new Button();
//bt.ID = "bt1";
//bt.Text = "测试";
//bt.CommandArgument = "1";
//bt.Click+=new EventHandler(bt_Click);
//e.Row.Cells[1].Controls.Add(bt);
}
}
protected void bt_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
if (bt.CommandArgument == "1")
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "red");
bt.CommandArgument = "0";
}
else
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "white");
bt.CommandArgument = "1";
}
}

<asp:GridView ID="GridView1" runat="server"  Width="230px" OnRowDataBound="GridView1_OnRowDataBound">
</asp:GridView>
mngzilin 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 poptang1 的回复:]
谢谢你的回答。确实是这样,但有什么方法可以动态生成的吗,在代码里直接生成Button的?多谢。
[/Quote]
建议你用模板,一般GridView是在if(!IsPostback){}中绑定数据的,动态生成的按钮在回发时候会消失。
除非你在每次回发后仍然能重新生成按钮,但是如果这样的话,绑定的数据就会刷新,那么你的按钮就会消失。
poptang1 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mngzilin 的回复:]
HTML code<asp:GridViewID="GridView1" runat="server" AutoGenerateColumns=FalseWidth="230px"><Columns><asp:TemplateField><HeaderTemplate><asp:ButtonID="Button1" runat="server" Text="全选" OnClick="Button1?-
[/Quote]
谢谢你的回答。确实是这样,但有什么方法可以动态生成的吗,在代码里直接生成Button的?多谢。
pt1314917 2010-01-17
  • 打赏
  • 举报
回复
使用模版列,在头模版中放控件。。。
goingshow 2010-01-17
  • 打赏
  • 举报
回复
在头模板使用button
poptang1 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mngzilin 的回复:]
把AutoGenerateColumns="False"删除,

否则就用模板列,11楼
[/Quote]

确实是的,太感谢了啊。
mngzilin 2010-01-17
  • 打赏
  • 举报
回复
把AutoGenerateColumns="False"删除,

否则就用模板列,11楼
poptang1 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mngzilin 的回复:]
你自己复制吧。
C# codeprotectedvoid Page_Load(object sender, EventArgs e)
{if (!IsPostBack)
{
DataTable dt=new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa","1");
dt.Rows.Add("sdafsa","2");
dt.Rows.Add("sdafsa","3");
dt.Rows.Add("sdafsa","4");
GridView1.DataSource= dt;
GridView1.DataBind();
}
Button bt=new Button();
bt.ID="bt1";
bt.Text="测试";
bt.CommandArgument="1";
bt.Click+=new EventHandler(bt_Click);
GridView1.HeaderRow.Cells[1].Controls.Add(bt);
}protectedvoid GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e)
{if (e.Row.RowType== DataControlRowType.Header)
{//Button bt = new Button();//bt.ID = "bt1";//bt.Text = "测试";//bt.CommandArgument = "1";//bt.Click+=new EventHandler(bt_Click);//e.Row.Cells[1].Controls.Add(bt); }
}protectedvoid bt_Click(object sender, EventArgs e)
{
Button bt= (Button)sender;if (bt.CommandArgument=="1")for (int i=0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","red");
bt.CommandArgument="0";
}elsefor (int i=0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","white");
bt.CommandArgument="1";
}
}
HTML code<asp:GridViewID="GridView1" runat="server" Width="230px" OnRowDataBound="GridView1_OnRowDataBound"></asp:GridView>
[/Quote]

多谢,但是试了下你的这个代码后,提示“未将对象引用设置到对象的实例”的错误,在GridView1.HeaderRow.Cells[1].Controls.Add(bt);处,不知道为什么,我的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa", "1");
dt.Rows.Add("sdafsa", "2");
dt.Rows.Add("sdafsa", "3");
dt.Rows.Add("sdafsa", "4");
GridView1.DataSource = dt;
GridView1.DataBind();

}

Button bt = new Button();
bt.ID = "bt1";
bt.Text = "测试";
bt.CommandArgument = "1";
bt.Click += new EventHandler(bt_Click);
GridView1.HeaderRow.Cells[1].Controls.Add(bt);
}

protected void bt_Click(object sender, EventArgs e)
{

}

protected void GridView1_OnDataBound(object sender, EventArgs e)
{

}

}
}



<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
ondatabound="GridView1_OnDataBound">
</asp:GridView>
</div>
</form>

</body>

MournIA 2010-01-17
  • 打赏
  • 举报
回复
模板列
poptang1 2010-01-16
  • 打赏
  • 举报
回复
可能我没说清楚,我意思是不做成超链接的文字,而用一个按钮取代。没有任何别的东西,只有一个Button而已。我也不是用这个来做排序。

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧