0

フォームビューオブジェクトにチェックボックスリストを配置しました。チェックボックスリストの結果をエンティティフレームワークのテーブルに保存してロードしたいと思います。

DataSourceID、DataTextField、およびDataValueField属性を使用して、2つの列を持つテーブルからの値とラベルをcblに入力しましたが、チェックされた値を格納するためにcblをエンティティフレームワークオブジェクトにバインドする方法が見つからないようですフォームビューが「編集」モードの場合。

どんな助けでもいただければ幸いです。ありがとう!

<asp:FormView ID="formView1" runat="server" DataSourceID="Ods1" 
        Height="203px" Width="495px" 
        onpageindexchanging="formView1_PageIndexChanging">
<EditItemTemplate>
    <asp:CheckBoxList ID="cblProducts" runat="server" RepeatColumns="3" 
                Width="782px" DataSourceID="SqlDataSource1" DataTextField="ProductName" 
                DataValueField="ProductCode">
    </asp:CheckBoxList>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
                SelectCommand="SELECT [ProductCode], [ProductName] FROM [Products]">
    </asp:SqlDataSource>
</EditItemTemplate>
</asp:FormView>
    <asp:ObjectDataSource ID="Ods1" runat="server" 
        DataObjectTypeName="WebApplication1.EDM.Emp" DeleteMethod="DeleteEmp" 
        InsertMethod="CreateNewEmp" OldValuesParameterFormatString="original_{0}" 
        SelectMethod="GetEmpByEmpId" TypeName="WebApplication1.EDM.EmpLogic" 
        UpdateMethod="UpdateEmp" OnSelecting="Ods1_Selecting">
        <SelectParameters>
            <asp:RouteParameter Name="EmpId" RouteKey="EmpId" Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>
4

2 に答える 2

0
<asp:FormView ID="formView1" runat="server" 
     OnItemUpdating="formView1_ItemUpdating" ...>

protected void formView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
   var cblProducts = formView1.FindControl("cblProducts") as CheckBoxList;

   foreach (ListItem item in cblProducts.Items)
   {
       if (item.Selected)
       {
           // Check if item.Value is not in the db for this employee, if so add it
       }
       else
       {
           // Check if item.Value is in the db for this employee, if so delete it
       }
   }

   // save
}
于 2012-08-23T14:25:48.830 に答える
0

次のことを行う必要があります。

foreach (ListItem chk in cblProducts.Items)
{
    string productId= chk.Value;
    if (IsProductAvailable(productId) // this method will basically goes to database and return true of false
        chk.Selected = true;
    else
        chk.Selected = false;
}


private void IsProductAvailable(string productId)
{
        string query = "SELECT [ProductId] FROM [Product] ";
        query += "WHERE [ProductId] = @ProductId";
        DbCommand comm = new DbCommand();
        comm.CommandText = query;

        DbParameter param = comm.CreateParameter();
        param.ParameterName = "@ProductId";
        param.Value = productId;
        comm.Parameters.Add(param);

        DataTable table = comm.ExecuteCommand();
        if (table.Rows.Count > 0)
        {
            return true;
        }
        else
            return false;
}

必要に応じてクエリとパラメータを変更してください。

于 2012-08-23T14:38:27.737 に答える