zoukankan      html  css  js  c++  java
  • 使用linq2sql 的DetailView 如何保存多对多关系

    比如有用户和角色这2个对象是多对多关系,而linq2sql是不支持多对多的,这个时候就要自己手工写代码了.

    代码
    public partial class frmUserEdit : System.Web.UI.Page
        {
            
    protected void Page_Load(object sender, EventArgs e)
            {
                
    if (!IsPostBack)
                {
                    
    if (Request["AddNew"== "1")
                    {
                        DetailsView1.DefaultMode 
    = DetailsViewMode.Insert;
                        DetailsView1.AutoGenerateInsertButton 
    = true;
                    }
                    
    else
                    {
                        DetailsView1.DefaultMode 
    = DetailsViewMode.Edit;
                        
                    }
                    BindRoleList();
                }
            }

            
    private void BindRoleList()
            {
                CheckBoxList cblRole 
    = DetailsView1.FindControl("cblRole"as CheckBoxList;
                cblRole.DataTextField 
    = "RoleName";
                cblRole.DataValueField 
    = "RoleID";
                cblRole.DataSourceID 
    = RolesDataSource.ID;
                cblRole.DataBind();
            }
            
    private List<long> GetSelectedRoles()
            {
                CheckBoxList cblRole 
    = DetailsView1.FindControl("cblRole"as CheckBoxList;
                List
    <long> result = new List<long>();
                
    foreach (ListItem item in cblRole.Items)
                {
                    
    if (item.Selected)
                        result.Add(
    long.Parse(item.Value));
                }
                
    return result;
            }

            
    //roles data bound,check many-to-many to check/uncheck selected 
            protected void cblRole_DataBound(object sender, EventArgs e)
            {
                User usr 
    = DetailsView1.DataItem as User;
                
    if (null == usr) return;

                CheckBoxList cblRole 
    = sender as CheckBoxList;
                
    foreach (Role r in usr.RoleList)
                {
                    
    foreach (ListItem item in cblRole.Items)
                    {
                        
    if (r.RoleID.ToString() == item.Value)
                            item.Selected 
    = true;
                    }
                }
            }

            }
            
    private void ShowMsg(string ExceptionMsg)
            {
                lblErr.Text 
    = ExceptionMsg;
            }


            
    protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
            {
                User usr 
    = new User();
                usr.UserID 
    = long.Parse(Request["ID"]);
                usr.UserName 
    = e.NewValues["UserName"].ToString();
                UserService.Save(usr, GetSelectedRoles(), 
    false);
                e.Cancel 
    = true;
                ShowMsg(
    "Save Successfully");

            }

        }


  • 相关阅读:
    1461. Check If a String Contains All Binary Codes of Size K
    1460. Make Two Arrays Equal by Reversing Sub-arrays
    1466. Reorder Routes to Make All Paths Lead to the City Zero
    1464. Maximum Product of Two Elements in an Array
    js 获取select的值 / js动态给select赋值【转】
    js在HTML中的三种写法【转】
    php中 elseif和else if 的区别【转】
    PhpStorm 常用快捷键
    PhpStorm 2018最新汉化包 解决”设置”不可用问题【转】
    PHP json_encode里面经常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES【转】
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/linq2sql_detailview_manytomany.html
Copyright © 2011-2022 走看看