0

「資格」列を持つグリッドビュー「gvAccounts」があります(とりわけ)。各 Entitlements セルには、別のグリッドビュー 'gvEntitlements' が含まれており、アカウントごとに権利のリストが含まれています (gvAccounts の各行はアカウントです)。

Entitlements セルの EditTemplate には、CheckBoxList 'cblEntitlements' があり、利用可能なすべての資格が入力されています。

[編集] をクリックすると、cblEntitlements で gvEntitlements に表示される資格のみがチェックされるようになります。RowEditing イベントでたくさんのことを試しましたが、何も機能しませんでした (行で .FindControl を使用すると多くの null 参照エラーが発生しました)。 .

ありがとう!

マークアップ:

<asp:GridView
    ID="gvAccounts"
    runat="server"
    DataSourceID="AccountsObjectDataSource"
    AllowSorting="True"
    AutoGenerateColumns="False"
    DataKeyNames="CorpID,AppKey"
    Width="100%"
    OnRowDataBound="gvAccounts_RowDataBound"
    OnRowEditing="gvAccounts_RowEditing"
    EnableModelValidation="True" >

    <Columns>

        <asp:TemplateField
            HeaderText="Entitlements"
            SortExpression="Entitlements">

            <ItemTemplate>

                    <asp:GridView
                        ID="gvEntitlements"
                        DataKeyNames="EntitlementID"
                        runat="server"
                        ShowHeader="False" 
                        BorderStyle="None" 
                        EmptyDataText="common" 
                        GridLines="None"
                        AutoGenerateColumns="False">

                        <Columns>
                            <asp:BoundField
                                DataField="EntitlementID" 
                                Visible="false" />

                            <asp:BoundField
                                DataField="Entitlement"/>
                        </Columns>

                    </asp:GridView>

            </ItemTemplate>

            <EditItemTemplate>                         

                <asp:CheckBoxList
                    ID="cblEntitlements"
                    runat="server" 
                    DataSourceID="cblObjectDataSource" 
                    DataTextField="Entitlement" 
                    DataValueField="EntitlementID"
                    RepeatColumns="2" 
                    RepeatDirection="Horizontal">
                </asp:CheckBoxList>

                <asp:ObjectDataSource
                    ID="cblObjectDataSource"
                    runat="server"
                    SelectMethod="GetAppEntitlements"
                    TypeName="CMRPWebApp.Business.CMRPControllerApps">

                    <SelectParameters>
                        <asp:ControlParameter
                            ControlID="DropDownList1"
                            Name="AppKey"
                            PropertyName="SelectedValue"
                            Type="Int32"/>
                    </SelectParameters>

                </asp:ObjectDataSource>

            </EditItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:GridView>



<asp:ObjectDataSource
    ID="AccountsObjectDataSource"
    runat="server"
    SelectMethod="GetUsersForApp"
    TypeName="CMRPWebApp.Business.CMRPControllerApps"

    <SelectParameters>
        <asp:ControlParameter  
            ControlID="DropDownList1"
            Name="AppKey"
            PropertyName="SelectedValue"
            Type="Int32" />
    </SelectParameters>

</asp:ObjectDataSource>

コード ビハインド:

protected void gvAccounts_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //for each row, run a query for that appkey + corp ID to retrieve the entitlements for that account.
        System.Collections.Specialized.IOrderedDictionary datakeyNames = gvAccountsApp.DataKeys[e.Row.RowIndex].Values;
        string corpID = datakeyNames["CorpID"].ToString();
        int appKey = Convert.ToInt32(datakeyNames["AppKey"]);

        if ((e.Row.FindControl("gvEntitlements") as GridView) != null)
        {
            GridView gv = e.Row.FindControl("gvEntitlements") as GridView;
            gv.DataSource = CMRPControllerApps.GetAccountEntitlements(corpID, appKey);
            gv.DataBind();
        }
    }
}

protected void gvAccounts_RowEditing(object sender, GridViewEditEventArgs e)
{
    // ?
}
4

1 に答える 1

1

あなたの質問の私の理解から、編集テンプレートにすべての資格を表示し、特定のアカウントに属する資格のみをチェックしたいと考えています。

私が気づいたいくつかのこと:

  1. GridView1コード ビハインドでは、特定のアカウントの権利のリストに名前を付けたものをバインドしているようです。あなたのコードにはそのような名前はありません。

  2. グリッドビューに 2 回バインドしていますか? マークアップで、データソースを に設定していることがわかりますcblEntitlements。これはあなたが直面している特定の問題ですか?

ここでポイントを見逃していたら申し訳ありませんが、少し混乱しています。

于 2013-05-01T15:12:00.480 に答える