ASP.NET GridView数据绑定后LinkButton的Click事件不触发,高手帮我看一下
程序代码如下publicpartialclassControls_uc_UserManage:System.Web.UI.UserControl{protectedvoi...
程序代码如下
public partial class Controls_uc_UserManage : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GetAllAccount();
}
}
/// <summary>
/// 绑定Gridview数据源
/// </summary>
private void GetAllAccount()
{
UserOperate op = new UserOperate();
DataSet ds = op.GetAllAccount();
wdgAccountManage.DataSource = ds;
wdgAccountManage.DataBind();
}
protected void lbtnAddUser_Click(object sender, EventArgs e)
{
Response.Redirect("AddNewUser.aspx");
}
/// <summary>
/// 查询事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnFilter_Click(object sender, EventArgs e)
{
UserOperate op = new UserOperate();
string condition = tbFilter.Text.Trim();
DataSet ds = new DataSet();
if (condition.Length > 0)
{
ds = op.GetPartAccount(condition);
wdgAccountManage.DataSource = ds;
wdgAccountManage.DataMember = ds.Tables[0].TableName;
wdgAccountManage.DataBind();
}
else
{
this.GetAllAccount();
}
}
/// <summary>
/// LinkButton事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void wdgAccountManage_ItemCommand(object sender, Infragistics.Web.UI.GridControls.HandleCommandEventArgs e)
{
if (e.CommandName == "cmdDelete")
{
string rScript = "<script>alert('" + e.CommandArgument + "');window.location.href ='AccountManage.aspx'</script>";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "js", rScript);
}
}
}
if (!IsPostBack) 中绑定数据,但是点击GridView中的LinkButton产生回送事件后,LinkButton的Click事件触发不了,而且回送后GridView没有数据了。请问GridView要如何绑定数据才好啊 展开
public partial class Controls_uc_UserManage : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GetAllAccount();
}
}
/// <summary>
/// 绑定Gridview数据源
/// </summary>
private void GetAllAccount()
{
UserOperate op = new UserOperate();
DataSet ds = op.GetAllAccount();
wdgAccountManage.DataSource = ds;
wdgAccountManage.DataBind();
}
protected void lbtnAddUser_Click(object sender, EventArgs e)
{
Response.Redirect("AddNewUser.aspx");
}
/// <summary>
/// 查询事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnFilter_Click(object sender, EventArgs e)
{
UserOperate op = new UserOperate();
string condition = tbFilter.Text.Trim();
DataSet ds = new DataSet();
if (condition.Length > 0)
{
ds = op.GetPartAccount(condition);
wdgAccountManage.DataSource = ds;
wdgAccountManage.DataMember = ds.Tables[0].TableName;
wdgAccountManage.DataBind();
}
else
{
this.GetAllAccount();
}
}
/// <summary>
/// LinkButton事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void wdgAccountManage_ItemCommand(object sender, Infragistics.Web.UI.GridControls.HandleCommandEventArgs e)
{
if (e.CommandName == "cmdDelete")
{
string rScript = "<script>alert('" + e.CommandArgument + "');window.location.href ='AccountManage.aspx'</script>";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "js", rScript);
}
}
}
if (!IsPostBack) 中绑定数据,但是点击GridView中的LinkButton产生回送事件后,LinkButton的Click事件触发不了,而且回送后GridView没有数据了。请问GridView要如何绑定数据才好啊 展开
4个回答
展开全部
后台程序就是这样,你需要将gridview绑定的函数独立出来 如gridbind();
在执行linkbutton click事件后再调用一次 gridbind();
你先单独看看是否取到了e.commandArgument
commandArgument 也是需要绑定的。在前台中 gridview是模板化的,并绑定commandArgument
你在后台才能取到他的值。
----------------------------------------------------------------------------------------------------------
Gridview 获取行号或者此行某一列的数据 跳转到各自不同的页面
位置:把一个linkbutton先转化成模板
<asp:TemplateField HeaderText="link" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false"
CommandName="button" Text="Button" CommandArgument='<%# Container.DataItemIndex %>'
onclick="LinkButton1_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
在Gridview_RowCommand 或者 RowDataBound函数中 写入
int j = Convert.ToInt32(e.CommandArgument);
LinkButton lb = (LinkButton)GridView1.Rows[j].FindControl("LinkButton1");
if (j == 0)
lb.PostBackUrl = "login.aspx";
if (j == 1)
lb.PostBackUrl = "Register.aspx";
根据不同行号 点击linkbutton跳转到不同的页面
在执行linkbutton click事件后再调用一次 gridbind();
你先单独看看是否取到了e.commandArgument
commandArgument 也是需要绑定的。在前台中 gridview是模板化的,并绑定commandArgument
你在后台才能取到他的值。
----------------------------------------------------------------------------------------------------------
Gridview 获取行号或者此行某一列的数据 跳转到各自不同的页面
位置:把一个linkbutton先转化成模板
<asp:TemplateField HeaderText="link" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false"
CommandName="button" Text="Button" CommandArgument='<%# Container.DataItemIndex %>'
onclick="LinkButton1_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
在Gridview_RowCommand 或者 RowDataBound函数中 写入
int j = Convert.ToInt32(e.CommandArgument);
LinkButton lb = (LinkButton)GridView1.Rows[j].FindControl("LinkButton1");
if (j == 0)
lb.PostBackUrl = "login.aspx";
if (j == 1)
lb.PostBackUrl = "Register.aspx";
根据不同行号 点击linkbutton跳转到不同的页面
展开全部
用gridview的rowcommand事件 直接用控件的事件是不对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主看你的Gridview 是否写了绑定ID,
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" OnClientClick="return confirm('是否要删除')" CommandName="Delete"
Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
protected void Gridview_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "del":
if (MyStudent.BLL.StudentManage.DeleteById(int.Parse(e.CommandArgument.ToString())))
{
GetData();
}
break;
}
}
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" OnClientClick="return confirm('是否要删除')" CommandName="Delete"
Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
protected void Gridview_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "del":
if (MyStudent.BLL.StudentManage.DeleteById(int.Parse(e.CommandArgument.ToString())))
{
GetData();
}
break;
}
}
追问
' CommandName="cmdDelete">删除我已经写了,如果我把 if (!IsPostBack) { this.GetAllAccount()};
去掉IsPostBack,改为每次Load的时候的执行this.GetAllAccount()绑定数据,那click事件是可以触发的
追答
if (!IsPostBack)
{
this.GetAllAccount();
}
是的 加载的时候必须IsPostBack里面加载数据,
这是每个界面都要的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额?GridView?不习惯,感觉木有Repeater好用。
你贴出来前台代码看看啊
你贴出来前台代码看看啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询