我有一个GridView,我在gv_RowDataBound上动态创建Label和Button。
的.cs
Label Tagvalue = new Label();
Tagvalue.ID = "lblTags_"+i;
//Tagvalue.CssClass = "tagBubble tagBubbleDelete";
Tagvalue.Text = tag;
Button delete = new Button();
delete.ID = "btnDelete_" + i;
delete.ToolTip = "Delete";
delete.CssClass = "tagBubbleDelete";
delete.CommandName = "Delete";
delete.CommandArgument = imageID.Text;
问题是“RowCommand”函数没有被触发。所以我无法访问e.CommandName ==“删除”。
如何为GridView中的动态创建按钮触发RowCommand事件。
任何帮助都是赞赏的。
******* EDIT
的.aspx
<asp:GridView runat="server" ID="myGV" AllowSorting="false" AllowPaging="False"
PageSize="20" AutoGenerateColumns="False"
DataSourceID="LDSgv"
ondatabound="gv_DataBound"
OnRowDataBound="gv_RowDataBound"
OnRowCommand="gv_RowCommand"
>
<asp:TemplateField HeaderText="Details" HeaderStyle-CssClass="noSort"
ItemStyle-CssClass="fieldAlignCenter">
<ItemTemplate>
<div class="alignLeft marginTop5 float-l" id="Tags" runat="server" style="clear:both">
//**Here I am adding the dynamic Buttons
</div>
</ItemTemplate>
</asp:TemplateField>
</asp:GridView>
答案 0 :(得分:1)
问题是您正在创建按钮gv_RowdataBound事件 当你点击按钮时,页面重新加载,按钮就是 这次没有创建,因为你已经编写了代码 gv_RowDataBound event.So按钮将无效,因为没有 按钮!
你应该尝试这样
protected void Page_Init(object sender, EventArgs e)
{
GridView1.DataBind(); //Key code
}
protected void gv_DataBound(object sender, EventArgs e)
{
Button delete = new Button();
delete.ID = "btnDelete_" + i;
delete.ToolTip = "Delete";
delete.CssClass = "tagBubbleDelete";
delete.CommandName = "Delete";
delete.CommandArgument = imageID.Text;
}
protected void gv_RowCommand(object sender, CommandEventArgs e) //Your grid view function change accroding you need!!
{
if (e.CommandName == "Delete")
{
}
}
我不确定它会100%起作用,但至少你会试试这个
如果您在page_load绑定gridview,则必须使用此代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
YourGridviewbindCode(); //Key code
}
}
因为如果你每次绑定gridview它可能会取消Button click的效果!
答案 1 :(得分:1)
试试这个
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gridbind();
}
}
答案 2 :(得分:1)
感觉良好回答自己的问题。 我尝试了以下方法:
//**OnPage Load
if (IsPostBack)
{
//String ButtonID = Page.Request.Params["__EVENTTARGET"];
Control c = GetPostBackControl(this.Page);
if (c != null)
{
//...
var ID = c.ID;
}
else
{
Mygv.DataBind();
}
}
protected Control GetPostBackControl(Page page)
{
Control control = null;
string ctrlname = page.Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != string.Empty)
{
control = page.FindControl(ctrlname);
}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c;
break;
}
}
}
return control;
}
这里我首先找到导致PostBack的控件。 如果控件是(非NULL),即(如果不是动态创建的)控件,则不要PostBack。 另外,PostBack用于动态创建的控件。