在开始本章之前应该注意:
1,在新增、修改、删除行前应设置KeyFieldName属性,否则无法执行行维护。
2,如果使用SqlDataSource作为数据源,必须设置DataSourceMode=”DataSet”才可更新数据(插入、修改、删除),DataSourceMode=”datareader”时不可更新数据。
一、如何进入编辑状态
在后台调用AddNewRow()进入新增状态,
调用StartEditRow()进入修改状态
调用CancelEdit()或UpdateEdit()取消编辑状态
示例:
protected void btnServerSave_Click(object sender, EventArgs e) { this.ASPxGridView1.CancelEdit();//取消编辑状态 this.ASPxGridView1.UpdateEdit();//保存数据 }
二、调用UpdateEdit方法保存数据,或调用BeginUpdate()和EndUpdate()分别处理保存前与保存后的操作。
三、编辑模式的设置
即设置SettingsEditing.Mode属性
Inline:在当前行上直接编辑(类似grid)
EditForm:当前行转化为表单,嵌入在行中
EditFormAndDisplayRow:同EditForm,但保留当前行
PopupEditForm: 弹出窗口编辑
编辑面板位置的设置:
SettingsEditing.NewItemRowPosition属性用来指定新增行的位置。GridViewNewItemRowPosition枚举型,可取值:Top、Bottom。默认为Top。
当取值为Top时,在当前页第一行新增;当取值为Bottom时,在当前页最后一行新增。
如下示例演示了如何编辑模式:
protected void btnServerAddRow_Click(object sender, EventArgs e) { string editMode = this.ddlEditMode.SelectedValue; GridViewEditingMode gridViewEditingMode; switch (editMode) { case "Inline": gridViewEditingMode = GridViewEditingMode.Inline; break; case "EditForm": gridViewEditingMode = GridViewEditingMode.EditForm; break; case "EditFormAndDisplayRow": gridViewEditingMode = GridViewEditingMode.EditFormAndDisplayRow; break; case "PopupEditForm": gridViewEditingMode = GridViewEditingMode.PopupEditForm; break; } this.ASPxGridView1.SettingsEditing.Mode = gridViewEditingMode; this.ASPxGridView1.AddNewRow(); }
下面我们开始各方法的具体示例:
1,新增行后保存数据方法示例:
<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" KeyFieldName="LogID" DataSourceID="SqlDataSource1" > <Columns > <dxwgv:GridViewDataColumn Caption="LogID" FieldName="LogID" ReadOnly="false" / > <dxwgv:GridViewDataColumn Caption="发生时间" FieldName="OCCDatetime" ReadOnly="false" / > <dxwgv:GridViewDataColumn Caption="事件" FieldName="Event" / > <dxwgv:GridViewDataColumn Caption="类型" FieldName="Type" / > <dxwgv:GridViewDataColumn Caption="创建人" FieldName="Creator" / > <dxwgv:GridViewDataColumn Caption="创建日期" FieldName="CreateDate" / > <dxwgv:GridViewDataColumn Caption="备注" FieldName="Remark" / > <dxwgv:GridViewCommandColumn Caption="操作" Visible="true" > <UpdateButton Text="保存" Visible="true" / > <NewButton Text="新增" Visible="true" / > </dxwgv:GridViewCommandColumn > </Columns > </dxwgv:ASPxGridView > <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="数据库连接字符" SelectCommand="select * from Sys_Log" InsertCommand="Insert into Sys_Log(OCCDatetime,Event,Type,Creator,CreateDate,Remark) values(@OCCDatetime,@Event,@Type,@Creator,@CreateDate,@Remark)" > <InsertParameters > <asp:Parameter Name="OCCDatetime" Type="DateTime" / > <asp:Parameter Name="Event" Type="String" / > <asp:Parameter Name="Type" Type="String" / > <asp:Parameter Name="Creator" Type="String" / > <asp:Parameter Name="CreateDate" Type="DateTime" / > <asp:Parameter Name="Remark" Type="String" / > </InsertParameters > </asp:SqlDataSource >
2.修改示例:
(1)必要条件:数据源必须支持更新(如SqlDataSource配置了UpdateCommand), 必须有主键。
(2)调用StartEdit方法使行进入编辑状态
可以调用UpdateEdit方法保存数据,或调用CancelEdit方法取消编辑状态。
也可以显示出内置的【编辑】按钮让用户点击进入编辑状态。
int firstSelectedRowIndex =-1; if (this.ASPxGridView1.VisibleRowCount <= 0) return; //取选中的第一行 do { firstSelectedRowIndex++; if (this.ASPxGridView1.Selection.IsRowSelected(firstSelectedRowIndex)) { break; } } while (firstSelectedRowIndex >= 0 || firstSelectedRowIndex >= this.ASPxGridView1.VisibleRowCount); if (firstSelectedRowIndex == -1) { firstSelectedRowIndex = 0; } int logID = (int)(this.ASPxGridView1.GetRowValues(firstSelectedRowIndex, "LogID")); this.ASPxGridView1.MakeRowVisible(logID);//使指定行可见 this.ASPxGridView1.FocusedRowIndex = 0;//使指定行成为当前行 this.ASPxGridView1.Selection.UnselectAll();//取消所有行的选择 this.ASPxGridView1.Selection.SelectRow(0);//选中第一行 this.ASPxGridView1.StartEdit(firstSelectedRowIndex);//使指定行进入编辑状态
4.删除
(1)如果数据源不支持删除则无法执行。必须有主键才能删除(KeyFieldName)。
(2)可调用DeleteRow方法实现数据删除。DeleteRow成功执行后会将数据从数据库中删除。调用DeleteRow方法会首先触发RowDeleting事件(可以在此事件中阻止删除),执行后会触发RowDeleted事件。终端用户还可以通过点击内置的【删除】按钮实现删除。
DeleteRow语法:
Void DeleteRow(int visibleIndex)
参数visibleIndex表示行号。
RowDeleting事件的声明原型:
void ASPxGridView1_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
可以通过修改ASPxDataDeletingEventArgs.Cancel=true来阻止删除。
DevExpress.Web.Data.ASPxDataDeletingEventArgs属性:
Cancel:bool,是否取消删除。可读写。
Keys:OrderedDictionary,要删除行的主键栏位值。只读。
Values: OrderedDictionary,要删除行的非主键(实际上是所有栏位)栏位值。只读。
示例:
//删除行前事件
protected void ASPxGridView1_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e) { for (int i = 0; i < e.Keys.Count; i++) { if (Int32.Parse(e.Keys[i].ToString()) > 20000) { e.Cancel = true; break; } } }
RowDeleted事件的声明原型:
void ASPxGridView1_RowDeleted(object sender, DevExpress.Web.Data.ASPxDataDeletedEventArgs e)
可以在此事件中获取删除时出现的异常并按自己的方法处理异常,或记录成功删除的行数。
DevExpress.Web.Data.ASPxDataDeletedEventArgs属性包括:
AffectedRecords:int,删除影响到的行数。只读。
Exception:Exception,删除数据期间发生的异常。只读。
ExceptionHandled:bool,是否已处理异常。可读写。
Keys:OrderedDictionary,要删除行的主键栏位值。只读。
Values: OrderedDictionary,要删除行的非主键(实际上是所有栏位)栏位值。只读。