FineUI 官方论坛
标题:
编辑单元格:保存真实数据库
[打印本页]
作者:
shouzhi2007
时间:
2015-1-23 15:03
标题:
编辑单元格:保存真实数据库
本帖最后由 shouzhi2007 于 2015-1-23 15:07 编辑
本人写一下这两天调试的结果,哎,说实在也有点菜了,还问了好几位大神在帮助,最终还是大神⑥阿太⑥帮助完成了。
我写这个是为了和例子没有数据库的操作。本人之前在论坛上找了几久没有相应的结果,所以把心得写下来,为大家服务一下。(大神略过,指点!)
首先:
参考例子:
http://fineui.com/demo/#/demo/grid/grid_editor_cell_databind.aspx
//保存更新代码,
protected void Button1_Click(object sender, EventArgs e)
{
Dictionary<int, Dictionary<string, object>> modifiedDict = Grid3.GetModifiedDict();
foreach (int rowIndex in modifiedDict.Keys)
{
int rowID = Convert.ToInt32(Grid3.DataKeys[rowIndex][0]);
//这一行为从数据库根据 rowID读数据
EquipmentLog item = DB.EquipmentLogs.Where(u => u.ID == rowID).FirstOrDefault();
//赋予ID主键
item.ID = rowID;
//DataRow row = FindRowByID(rowID);
UpdateDataRow(modifiedDict[rowIndex], item);
//保存
DB.SaveChanges();
}
BindGrid();
Label3.Text = "用户修改的数据:" + Grid3.GetModifiedData().ToString(Newtonsoft.Json.Formatting.None);
Alert.Show("数据保存成功!(表格数据已重新绑定)");
}
复制代码
//更新代码
private static void UpdateDataRow(Dictionary<string, object> rowDict, EquipmentLog rowData)
{
if (rowDict.ContainsKey("x1"))
{
rowData.x1 = rowDict["x1"].ToString();
}
if (rowDict.ContainsKey("x2"))
{
rowData.x2 = rowDict["x2"].ToString();
}
if (rowDict.ContainsKey("x3"))
{
rowData.x3 = rowDict["x3"].ToString();
}
if (rowDict.ContainsKey("x4"))
{
rowData.x4 = rowDict["x4"].ToString();
}
}
复制代码
实体库:EquipmentLog
作者:
shouzhi2007
时间:
2015-1-23 15:03
//下拉列表代码
private void BindDropDownList()
{
List<string> majors = new List<string>();
majors.Add("Δ");
majors.Add("★");
majors.Add("√");
majors.Add("x");
ddlMajor.DataSource = majors;
ddlMajor.DataBind();
DropDownList1.DataSource = majors;
DropDownList1.DataBind();
DropDownList2.DataSource = majors;
DropDownList2.DataBind();
DropDownList3.DataSource = majors;
DropDownList3.DataBind();
}
复制代码
作者:
shouzhi2007
时间:
2015-1-23 15:04
// 获取数据源代码
private DataTable GetSourceData()
{
IQueryable<EquipmentLog> q = DB.EquipmentLogs;
DataTable dt = LINQToDataTable<EquipmentLog>(q);
return dt;
}
复制代码
作者:
shouzhi2007
时间:
2015-1-23 15:04
//将IEnumerable<T>类型的集合转换为DataTable类型
public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{ //定义要返回的DataTable对象
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;//安全性检查
//循环遍历集合,使用反射获取类型的属性信息
foreach (T rec in varlist)
{
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
//循环PropertyInfo数组
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;//得到属性的类型
//如果属性为泛型类型
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{ //获取泛型类型的参数
colType = colType.GetGenericArguments()[0];
}
//将类型的属性名称与属性类型作为DataTable的列数据
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
//新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();
//循环遍历属性集合
foreach (PropertyInfo pi in oProps)
{ //为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr);
}
return dtReturn;//返回DataTable对象
}
复制代码
作者:
shouzhi2007
时间:
2015-1-23 15:06
[attach]7106[/attach]
作者:
Mr.Wu
时间:
2015-3-19 09:59
不错,赞一个
作者:
Gnid
时间:
2015-3-20 10:46
小小的建议:
List<string> majors = new List<string>();
majors.Add("Δ");
majors.Add("★");
majors.Add("√");
majors.Add("x");
复制代码
换成
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