1

Gridview が構成されています。

 <asp:GridView ID="gvApptList" runat="server" CssClass="fullwidth" AutoGenerateColumns="False" DataKeyNames="AppointmentID">
                <Columns>
                    <asp:BoundField DataField="Designer" HeaderText="Designer" SortExpression="Designer" />
                    <asp:BoundField DataField="AppointmentDTM" HeaderText="Appointment Date" SortExpression="AppointmentDTM" DataFormatString="{0:MM-dd-yyyy hh:mm tt}" />
                    <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" />
                    <asp:BoundField DataField="Disposition" HeaderText="Disposition" SortExpression="Disposition" />
                    <asp:BoundField DataField="AppointmentNotes" HeaderText="Appointment Notes" SortExpression="AppointmentNotes" />
                    <asp:ButtonField ButtonType="Button" CommandName="viewAppointment" Text="View" />
                </Columns>
            </asp:GridView>

[表示] ボタンをクリックすると、gvApptList_RowCommand が起動します。コードは次のとおりです。

If e.CommandName = "viewAppointment" Then
        Dim tApptID As Long
        gvApptList.SelectedIndex = e.CommandArgument
        If IsNumeric(gvApptList.DataKeys(e.CommandArgument).Value) Then
            tApptID = gvApptList.SelectedDataKey.Value
        Else
            Exit Sub
        End If
        tbAppointmentID.Text = tApptID
        DisplayInfo()
    End If

gvApptList.DataKeys(e.CommandArgument).Value は常に何も返されません。ここで何が欠けていますか?この正確な販売コードが他のページで機能しています。

4

1 に答える 1

0

タスクに関連してDataKeys、ASP.NETGridViewコントロールで使用する正しい構文を以下に示します (re: http://www.codeproject.com/Tips/225352/Nesting-GridView-control-in-ASP-NET、C# で記述) :

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
     // get data key from selected row
     s.SelectParameters[0].DefaultValue =Convert.ToString(((GridView)sender).DataKeys[e.Row.RowIndex].Values["AppointmentID "]);
    }
}

クリックRowしたコマンドに対応する への参照を取得し、その から値を抽出する必要があります。また、その SELECT クエリで基になるがフィールドを含むことを確認してください。ButtonDataKeysRowDataSourceAppointmentID

ケースによっては、次のようになります (リスト 2 を参照)。

リスト 2。

protected void ViewButton_OnClick(object sender, EventArgs e)
{
    Button btn = sender as Button;
    GridViewRow row = btn.NamingContainer as GridViewRow;
    string strID = gvApptList.DataKeys[row.RowIndex].Values["AppointmentID"].ToString();

    int intID;
    if (String.IsNotNullOrEmpty(strID)
    {
      intID = int.Parse(strID);
    }
}

またはTryParse()Convert()、 などを使用することもできます。

これが役立つことを願っています。

于 2016-03-07T19:51:46.723 に答える