1

以下のコードを使用して、コードビハインドからGridViewのセルにボタンを追加しますwhen user click on a buttonが、追加する各ボタンをクリックすると、クリックイベント(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)
        {
    //...
    }

グリッドビューに以下のコードを入力します

//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();

//コマンド私も以下のように使用し、GridviewCommandNameに設定しますが、機能しませんGridView_RowCommandOnRowCommand

lnk.CommandName="選択";

protected void GridView_RowCommand(Object sender、GridViewCommandEventArgs e){....。

4

2 に答える 2

0

コントロールとイベントを手動で追加する場合は、各ポストバックでそれらを追加する必要があります。グリッドを1回だけデータバインドしますが(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
于 2013-01-03T18:13:05.240 に答える
0

更新パネルのリンクボタンにも同様の問題があったと思います。

グリッドビューコントロールを含む更新パネルにこのトリガーを追加したと思います。

<Triggers>
     <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="RowCommand" />
</Triggers>

問題を解決するには。グリッドビューが初期化onRowCommand="GridView_RowCommand"されたプロパティセットであり、リンクボタンにCommandName=""プロパティセットがあることを確認してください。

次に、リンクボタンイベントが発生したときに、内部でそれを発生させたCommandNameを特定できますGridView_RowCommand

protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e) 
{
   if (e.CommandName == "Link Button Command Name")
   {
      // link button
   }
}

それでも問題が解決しない場合は、GridView_RowCreatedPre_Renderページまたはページにリンクボタンを作成してみてください。

于 2013-01-03T17:11:11.353 に答える