在开始本章之前应该注意:
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,要删除行的非主键(实际上是所有栏位)栏位值。只读。