前端Grid控件的定义:
注意SortField="BIN" SortDirection="ASC" 排序相关属性定义,如果服务器代码不排序,应该取消该属性以免报错。
DataKeyNames 这个属性是定义关键字段,如果有多个关键字段,可以依次写入,这里例子只有一个BIN字段。
<f:Grid ID="Grid1" ShowBorder="false" ShowHeader="false" Width="850px" SortField="BIN" SortDirection="ASC"
PageSize="15" AllowPaging="true" IsDatabasePaging="true" OnPageIndexChange="Grid1_PageIndexChange"
runat="server" DataKeyNames="BIN" AllowCellEditing="true" ClicksToEdit="2" AllowSorting="true">
服务器处理前端控件传回的修改数据代码:
详细的说明如下
1. 传回数据类型是一个大字典里面再放小字典的变量类型,这里要清楚Dictionary<int, Dictionary<string, object>>,这个int 是前端定义DataKeyNames关键字数值的行号,
通过这个int我们可以锁定前端表格中哪行被修改。小字典中放的是【字段名称】和【该字段被修改后的数据】。
2. 我们先拿到数据库的表 var q = from c in db.MM_BIN select c; //数据库表对象
3. 用大字典的int在Grid中得到行号对应的那一行中的关键字 string s_BIN = mytools.s(Grid1.DataKeys[DataKeysLine][0]);
4. 然后我们遍历数据库表,用关键字去锁定数据库中的行,修改之。
//保存修改数据 仓位
Dictionary<int, Dictionary<string, object>> modifiedDict = Grid1.GetModifiedDict();
if (modifiedDict.Count > 0)
{
var q = from c in db.MM_BIN select c; //数据库表对象
foreach (var one in modifiedDict)
{
int DataKeysLine = one.Key; //DataKeys数组的序号 [one.Key],WERKS,LGORT,BIN
string s_BIN = mytools.s(Grid1.DataKeys[DataKeysLine][0]);
Dictionary<string, object> dic = one.Value;
foreach (var row in q)
{
if ((DropDownList_WERKS.SelectedItem.Text == row.WERKS) && (DropDownList_LGORT.SelectedItem.Value == row.LGORT) && (s_BIN == row.BIN))
{
if (dic.ContainsKey("BIN")) row.BIN = mytools.s(dic["BIN"]);
if (dic.ContainsKey("BIN_NAME")) row.BIN_NAME = mytools.s(dic["BIN_NAME"]);
if (dic.ContainsKey("BIN_MAX")) row.BIN_MAX = mytools.d(dic["BIN_MAX"]);
if (dic.ContainsKey("BIN_MIN")) row.BIN_MIN = mytools.d(dic["BIN_MIN"]);
if (dic.ContainsKey("MEINS")) row.MEINS = mytools.s(dic["MEINS"]);
if (dic.ContainsKey("STORAGE_TYPE")) row.STORAGE_TYPE = mytools.s(dic["STORAGE_TYPE"]);
if (dic.ContainsKey("BINPOP")) row.BINPOP = mytools.s(dic["BINPOP"]);
row.ERSDA = mytools.t(DateTime.Now.ToString("yyyy-MM-dd"));
row.ZUSER = mytools.s(Session["username"].ToString());
break;
}
}
}
db.SubmitChanges();
BindGrid1();
}
示意图以后放出。。。。。。