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");

            }

        }


  • 相关阅读:
    vue 虚拟列表
    图片验证
    md5 文件上传
    js中apply方法的使用
    js通过replace()方法配合正则去除空格
    使用bind()方法扩充作用域
    取数组最大最小值得方法
    css穿透点击
    为什么选择器li#id名/li.类名的写法
    子元素与父元素等高
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/linq2sql_detailview_manytomany.html
Copyright © 2011-2022 走看看