FineUI 官方论坛

标题: 编辑单元格:保存真实数据库 [打印本页]

作者: shouzhi2007    时间: 2015-1-23 15:03
标题: 编辑单元格:保存真实数据库
本帖最后由 shouzhi2007 于 2015-1-23 15:07 编辑

本人写一下这两天调试的结果,哎,说实在也有点菜了,还问了好几位大神在帮助,最终还是大神⑥阿太⑥帮助完成了。

我写这个是为了和例子没有数据库的操作。本人之前在论坛上找了几久没有相应的结果,所以把心得写下来,为大家服务一下。(大神略过,指点!)

首先:
参考例子:http://fineui.com/demo/#/demo/grid/grid_editor_cell_databind.aspx
  1. //保存更新代码,
  2. protected void Button1_Click(object sender, EventArgs e)
  3.         {
  4.             Dictionary<int, Dictionary<string, object>> modifiedDict = Grid3.GetModifiedDict();

  5.             foreach (int rowIndex in modifiedDict.Keys)
  6.             {
  7.                 int rowID = Convert.ToInt32(Grid3.DataKeys[rowIndex][0]);

  8.                 //这一行为从数据库根据 rowID读数据
  9.                 EquipmentLog item = DB.EquipmentLogs.Where(u => u.ID == rowID).FirstOrDefault();
  10.                 //赋予ID主键
  11.                 item.ID = rowID;

  12.                 //DataRow row = FindRowByID(rowID);
  13.               
  14.                 UpdateDataRow(modifiedDict[rowIndex], item);

  15.                 //保存
  16.                DB.SaveChanges();
  17.                
  18.             }

  19.             BindGrid();

  20.              Label3.Text = "用户修改的数据:" + Grid3.GetModifiedData().ToString(Newtonsoft.Json.Formatting.None);

  21.             Alert.Show("数据保存成功!(表格数据已重新绑定)");
  22.         }
复制代码
  1. //更新代码
  2.    private static void UpdateDataRow(Dictionary<string, object> rowDict, EquipmentLog rowData)
  3.         {
  4.             if (rowDict.ContainsKey("x1"))
  5.             {
  6.                 rowData.x1 = rowDict["x1"].ToString();

  7.             }
  8.             if (rowDict.ContainsKey("x2"))
  9.             {
  10.                 rowData.x2 = rowDict["x2"].ToString();
  11.             }
  12.             if (rowDict.ContainsKey("x3"))
  13.             {
  14.                 rowData.x3 = rowDict["x3"].ToString();
  15.             }
  16.             if (rowDict.ContainsKey("x4"))
  17.             {
  18.                 rowData.x4 = rowDict["x4"].ToString();
  19.             }
  20.            

  21.         }
复制代码

实体库:EquipmentLog


作者: shouzhi2007    时间: 2015-1-23 15:03
  1. //下拉列表代码
  2.         private void BindDropDownList()
  3.         {
  4.             List<string> majors = new List<string>();
  5.             majors.Add("Δ");
  6.             majors.Add("★");
  7.             majors.Add("√");
  8.             majors.Add("x");

  9.             ddlMajor.DataSource = majors;
  10.             ddlMajor.DataBind();

  11.             DropDownList1.DataSource = majors;
  12.             DropDownList1.DataBind();
  13.             DropDownList2.DataSource = majors;
  14.             DropDownList2.DataBind();
  15.             DropDownList3.DataSource = majors;
  16.             DropDownList3.DataBind();
  17.          
  18.         }  
复制代码

作者: shouzhi2007    时间: 2015-1-23 15:04
  1. //  获取数据源代码  
  2.         private DataTable GetSourceData()
  3.         {

  4.             IQueryable<EquipmentLog> q = DB.EquipmentLogs;

  5.             DataTable dt = LINQToDataTable<EquipmentLog>(q);


  6.             return dt;
  7.         }
复制代码

作者: shouzhi2007    时间: 2015-1-23 15:04
  1. //将IEnumerable<T>类型的集合转换为DataTable类型
  2.         public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
  3.         {   //定义要返回的DataTable对象
  4.             DataTable dtReturn = new DataTable();
  5.             // 保存列集合的属性信息数组
  6.             PropertyInfo[] oProps = null;
  7.             if (varlist == null) return dtReturn;//安全性检查
  8.             //循环遍历集合,使用反射获取类型的属性信息
  9.             foreach (T rec in varlist)
  10.             {
  11.                 //使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
  12.                 if (oProps == null)
  13.                 {
  14.                     oProps = ((Type)rec.GetType()).GetProperties();
  15.                     //循环PropertyInfo数组
  16.                     foreach (PropertyInfo pi in oProps)
  17.                     {
  18.                         Type colType = pi.PropertyType;//得到属性的类型
  19.                         //如果属性为泛型类型
  20.                         if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
  21.                         == typeof(Nullable<>)))
  22.                         {   //获取泛型类型的参数
  23.                             colType = colType.GetGenericArguments()[0];
  24.                         }
  25.                         //将类型的属性名称与属性类型作为DataTable的列数据
  26.                         dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
  27.                     }
  28.                 }
  29.                 //新建一个用于添加到DataTable中的DataRow对象
  30.                 DataRow dr = dtReturn.NewRow();
  31.                 //循环遍历属性集合
  32.                 foreach (PropertyInfo pi in oProps)
  33.                 {   //为DataRow中的指定列赋值
  34.                     dr[pi.Name] = pi.GetValue(rec, null) == null ?
  35.                         DBNull.Value : pi.GetValue(rec, null);
  36.                 }
  37.                 //将具有结果值的DataRow添加到DataTable集合中
  38.                 dtReturn.Rows.Add(dr);
  39.             }
  40.             return dtReturn;//返回DataTable对象
  41.         }
复制代码

作者: shouzhi2007    时间: 2015-1-23 15:06
[attach]7106[/attach]
作者: Mr.Wu    时间: 2015-3-19 09:59
不错,赞一个
作者: Gnid    时间: 2015-3-20 10:46
小小的建议:
  1. List<string> majors = new List<string>();
  2.             majors.Add("Δ");
  3.             majors.Add("★");
  4.             majors.Add("√");
  5.             majors.Add("x");
复制代码
换成
  1. List<string> majors = new List<string>(){"Δ","★","√","x"};
复制代码
至少能减少一点代码行数,看上去也舒服一点

作者: shouzhi2007    时间: 2015-3-24 11:50
谢谢!                                
作者: Mr.Wu    时间: 2015-3-30 17:26
不错,学习了{:soso_e179:}
作者: airportdc    时间: 2016-10-10 18:24
lz你好 , 我将数据显示到 Grid 中,修改后, 调用      
Label1.Text = String.Format("用户修改的数据:<pre>{0}</pre>", Grid1.GetModifiedData().ToString(Newtonsoft.Json.Formatting.Indented));
没有显示任何修改的值,可能是有哪些原因?
作者: 透明的世界    时间: 2016-11-3 18:37
我也正在找,毕竟表单字段太多,不可能一个个写。厉害




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4