我使用下面的代码从when user click on a button
后面的代码添加Button到GridView的Cell,但是当我点击我添加的每个按钮时,点击事件(lnk_Click)没有调用,按钮隐藏后我点击我可以解决这个问题吗?
//aspx
<asp:GridView ID="GridView1" runat="server" GridLines="None" Width="940px"
OnSelectedIndexChanged="grid_SelectedIndexChanged"
onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="False" CssClass="gridview">
<Columns>
<asp:TemplateField HeaderText="...">
<ItemTemplate>
<asp:Panel ID="pnlSteps" runat="server"></asp:Panel>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
//Code behind
for (int i = 0; i < GridView1.Rows.Count; i++)
{
Panel pnl = (Panel)GridView1.Rows[i].Cells[0].FindControl("pnlSteps");
LinkButton lnk = new LinkButton();
lnk.Text = "...";
pnl.Controls.Add(lnk);
lnk.Click += new EventHandler(lnk_Click);
}//for
...
protected void lnk_Click(object sender, EventArgs e)
{
//...
}
我用以下代码填充gridview
//dsSet is DataSet that i fill it with data from Database
DataTable dtt = new DataTable();
dtt.Columns.Add(new DataColumn("status", typeof(string)));
dtt.Columns.Add(new DataColumn("finantial", typeof(string)));
dtt.Columns.Add(new DataColumn("phone", typeof(string)));
dtt.Columns.Add(new DataColumn("name", typeof(string)));
dtt.Columns.Add(new DataColumn("code", typeof(string)));
for (int i = 0; i < dsSet.Tables[0].Rows.Count; i++)
{
DataRow dr = dtt.NewRow();
dr[0]=...;
dr[1]=...;
dr[2]=...;
dr[3]=...;
dr[4]=...;
dtt.Rows.Add(dr);
}//for
GridView1.DataSource = dtt;
GridView1.DataBind();
//命令
我也使用下面的CommandName
并将GridView_RowCommand
设置为Gridview的OnRowCommand
但不起作用
lnk.CommandName =“选择”;
protected void GridView_RowCommand(Object sender,GridViewCommandEventArgs e) { .....
答案 0 :(得分:0)
我相信我的更新面板中的链接按钮出现了类似的问题。
我相信我已将此触发器添加到包含网格视图控件的更新面板中。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="GridView1" EventName="RowCommand" />
</Triggers>
解决此问题。确保您的gridview已初始化onRowCommand="GridView_RowCommand"
属性设置,并且您的链接按钮已设置CommandName=""
属性。
然后当您的链接按钮事件触发时,您可以确定在GridView_RowCommand
内触发它的CommandName。
protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Link Button Command Name")
{
// link button
}
}
如果仍然无法解决您的问题,您可能需要尝试在GridView_RowCreated
或页面Pre_Render中创建链接按钮。
答案 1 :(得分:0)
手动添加控件和事件时,必须在每次回发时添加它们。仅将网格数据绑定一次(if(!IsPostBack)),但在每次回发时执行此循环:
for (int i = 0; i < GridView1.Rows.Count; i++)
{
Panel pnl = (Panel)GridView1.Rows[i].Cells[0].FindControl("pnlSteps");
LinkButton lnk = new LinkButton();
lnk.Text = "...";
pnl.Controls.Add(lnk);
lnk.Click += new EventHandler(lnk_Click);
}//for