0

データを GridView コントロールにバインドしています。最後の列の 1 つに画像 URL リンクがあります。

     <asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False" Width="100%" OnRowCommand="gvccase_RowCommand" RowStyle-CssClass="rowHover">……..


<asp:TemplateField>
   <ItemTemplate>
   <asp:ImageButton ID="lnbEdit" AlternateText="edit" ImageUrl="~/images/edit_icon.gif"
                                                runat="server" CommandName="cmdEdit" />
                                        </ItemTemplate>
                                        <HeaderTemplate>
                                            Edit
                                        </HeaderTemplate>
                                    </asp:TemplateField>

ユーザーが最後の列をクリックすると、OnRowCommnd イベント (protected void gvccase_RowCommand(object sender, System.Web.UI.WebControls.CommandEventArgs e)) が呼び出されます。

ユーザーがクリックした行を読み取る方法は? 列 1 にはケース番号があります。「OnRowCommand」の Case # を読みたいと思います。どうやってするの?

または私が達成したいのは....ユーザーが特定の行をクリックすると、詳細ページに移動したいということだけです。

ありがとう、スミス

4

3 に答える 3

0

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewcommandeventargs.aspxから:

  void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {
      // Convert the row index stored in the CommandArgument
      // property to an Integer.
      int index = Convert.ToInt32(e.CommandArgument);

  }
于 2012-11-28T00:00:37.317 に答える
0

次のようなことをしてみませんか:

<asp:GridView runat="server" ID="gvMajor" EmptyDataText="Your search terms did not match any records">
    <Columns>
        <asp:BoundField DataField="MajorCode" HeaderText="Major Code" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="lbModify" runat="server" CommandArgument='<%# Eval("MajorId") %>' OnClick="lbModify_Click" ImageUrl="~/Modify.png"   />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

次にコード ビハインドで:

protected void lbModify_Click(object sender, EventArgs e)
{
    var editLink = ((ImageButton)sender);
    //editLink.CommandArgument == MajorId
}

次のように、グリッドビューを正しいデータソースにバインドしていることを確認してください。

    DataTable dt = new DataTable();
    dt.Columns.Add("MajorId");
    dt.Columns.Add("MajorCode");

    //start loop here if needed
    DataRow dr = dt.NewRow();

    dr["MajorId"] = 1;
    dr["MajorCode"] = "MAJOR CODE 1";
    dt.Rows.Add(dr);
    //end loop

    gvMajor.DataSource = dt;
    gvMajor.DataBind();
于 2012-11-28T00:14:10.703 に答える
0

これを試すことができます。

HTML

  <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" OnRowCommand="GridView1_RowCommand">
      <Columns>
          <asp:TemplateField>
              <ItemTemplate>
                  <asp:Label ID="lblDatos" Text='<%#Eval("nombre")%>' runat="server" >
                  </asp:Label>
              </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField>
              <ItemTemplate>
                  <asp:ImageButton ID="lnbEdit" AlternateText="edit" CommandArgument='<%#Eval("link")%>'
                                            runat="server" CommandName="cmdEdit" />
              </ItemTemplate>
          </asp:TemplateField>
      </Columns>
  </asp:GridView>    

コードビハインド

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
            this.llenar();

    }

    void llenar()
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("nombre");
        dt.Columns.Add("link");
       DataRow dr= dt.NewRow();
       DataRow d1 = dt.NewRow();

       dr["nombre"] = "google";
       d1["nombre"] = "amazon";
       dr["link"]  = "http://google.com";
       d1["link"] = "http://amazon.com";
       dt.Rows.Add(dr);
       dt.Rows.Add(d1);

        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();


    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "cmdEdit")
        {
            Response.Redirect(e.CommandArgument.ToString());

        }
    }
}
于 2012-11-28T00:58:31.183 に答える