1

なんらかの理由で、コード container.DateItemIndex で値が返されません。

これが私のasp.netです:

   <asp:Label ID="Label1" runat="server" Text=""></asp:Label>

<form id="form1" runat="server"> 
         <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
             AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1" 
             EnableModelValidation="True" onrowcommand="GridView1_RowCommand" OnRowUpdating="GridView1_RowUpdating" >

             <Columns>
                 <asp:CommandField ShowEditButton="True" ControlStyle-CssClass="savefile"/>
                 <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                     ReadOnly="True" SortExpression="ID" />
                 <asp:BoundField DataField="event_name" HeaderText="event_name" 
                     SortExpression="event_name" />

                 <asp:TemplateField HeaderText="PDF">

           <ItemTemplate>

               <asp:Button ID="Button1" CommandArgument='<%# Container.DataItemIndex %>' CommandName="DownloadFile" runat="server" Text="Button" />

            </ItemTemplate>

           <EditItemTemplate>

               <asp:FileUpload ID="FileUpload1" runat="server" /> // shown only in edit mode

           </EditItemTemplate>

          </asp:TemplateField>

             </Columns>
         </asp:GridView>
</form>

そして私のC#コード:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

    if (e.CommandName == "DownloadFile")
    {

        Label1.Text = e.CommandArgument.ToString();

    }

}

CommandArgument='<%# Container.DataItemIndex %>' から値を取得できないのはなぜですか

4

4 に答える 4

4

に置き換えCommandArgument='<%# Container.DataItemIndex %>'ますCommandArgument='<%#DataBinder.Eval(Container, "DataItemIndex")%>'

于 2012-08-06T17:41:07.790 に答える
1

RowDataBoundでボタンのプロパティを動的に変更してみてください:

    void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
      {

        if(e.Row.RowType == DataControlRowType.DataRow)
        {
          var button =  e.Row.FindControl("Button1");

          button.CommandArgument = e.Row.DataItemIndex;
          button.CommandName="DownloadFile";         
          button.Text="Button";
          // COLUMN_INDEX where button shoud be
          e.Row.Cells[COLUMN_INDEX].Controls.Add(button);
         }

      }
于 2012-08-06T17:42:34.560 に答える
0

ときどき、イベントをトリガーした GridView 内の行のインデックスを取得する必要があります。CommandArgument をセットアップして、コード ビハインドで使用する行のインデックスを格納できます。GridView で:

<asp:GridView ID="gridView" runat="server" DataKeyNames="myId" OnRowCommand=" gridView_RowCommand">
    <Columns>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="btnAdd" runat="server" CommandArgument='<%# Container.DataItemIndex %>'
                    CommandName="Add" Text="Add" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

コード ビハインドでの参照:

protected void gridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Add")
    {
        int myId = (int)gridView.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
    }
}
于 2012-08-06T17:56:18.083 に答える
-1

これを試してみてください.....私はいつもそれが好きでした.....

<asp:TemplateField HeaderText="SNo." >
                <ItemTemplate>
                    <%# Container.DataItemIndex + 1 %>
                </ItemTemplate>
</asp:TemplateField>
于 2014-10-14T10:26:27.467 に答える