Hello Ira,
You can try adopting the following approach:
ASPX:
<form id="form1" runat="server">
Select one or several grid rows and click the Edit button to modify row values.<br /><br />
<dx:aspxgridview id="ASPxGridView1" runat="server" AutoGenerateColumns="False" ClientInstanceName="grid" KeyFieldName="ID" OnCellEditorInitialize="ASPxGridView1_CellEditorInitialize" OnCustomCallback="ASPxGridView1_CustomCallback" OnRowUpdating="ASPxGridView1_RowUpdating" OnStartRowEditing="ASPxGridView1_StartRowEditing">
<SettingsBehavior AllowMultiSelection="True"></SettingsBehavior>
<Columns>
<dx:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="0">
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="ID" VisibleIndex="1" ReadOnly="True">
<EditFormSettings Visible="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="File" VisibleIndex="2">
<PropertiesTextEdit NullText="Type new value here">
</PropertiesTextEdit>
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="Folder" VisibleIndex="3">
<PropertiesTextEdit NullText="Type new value here">
</PropertiesTextEdit>
</dx:GridViewDataTextColumn>
</Columns>
<SettingsEditing Mode="PopupEditForm" EditFormColumnCount="1" PopupEditFormModal="True" PopupEditFormHorizontalAlign="WindowCenter" PopupEditFormVerticalAlign="WindowCenter" />
</dx:aspxgridview>
<br />
<dx:ASPxButton ID="ASPxButton1" runat="server" AutoPostBack="False" Text="Edit">
<ClientSideEvents Click="function(s, e) {
if(grid.GetSelectedRowCount() == 0) alert('No grid row is selected.');
else grid.PerformCallback('StartEditing');
}" />
</dx:ASPxButton>
</form>
Code-Behind:
bool isEditing = false;
protected void Page_Load(object sender, EventArgs e){
if (!IsPostBack) Session["GridDataSource"] = CreateDataSource();
ASPxGridView1.DataSource = Session["GridDataSource"] as DataTable;
ASPxGridView1.DataBind();
}
private DataTable CreateDataSource(){
DataTable dataTable = new DataTable("MyTable");
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("File", typeof(string));
dataTable.Columns.Add("Folder", typeof(string));
dataTable.PrimaryKey = new DataColumn[ { dataTable.Columns["ID"] };
for (int i = 0; i < 15; i++){
dataTable.Rows.Add(new object[ { i, "File" + i.ToString(), "Folder1" });
}
return dataTable;
}
protected void ASPxGridView1_CustomCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomCallbackEventArgs e){
ASPxGridView grid = sender as ASPxGridView;
if (e.Parameters == "StartEditing") {
//grid.StartEdit(grid.FindVisibleIndexByKeyValue(grid.GetSelectedFieldValues("ID")[0]));
object lastSelectedRowKeyValue = grid.GetSelectedFieldValues("ID")[grid.Selection.Count - 1];
int lastSelectedRowVisibleIndex = grid.FindVisibleIndexByKeyValue(lastSelectedRowKeyValue);
grid.StartEdit(lastSelectedRowVisibleIndex);
}
}
protected void ASPxGridView1_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e){
isEditing = true;
}
protected void ASPxGridView1_CellEditorInitialize(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewEditorEventArgs e){
ASPxGridView grid = sender as ASPxGridView;
if (!(grid.IsEditing && isEditing)) return;
if (grid.Selection.Count == 1 || e.Column.ReadOnly) return;
e.Editor.Value = IsCommonValueForAllSelectedRows(e.Column, e.Value) ? e.Value : null;
}
private bool IsCommonValueForAllSelectedRows(DevExpress.Web.ASPxGridView.GridViewDataColumn column, object value) {
bool res = true;
List<object> selectedRowValues = ASPxGridView1.GetSelectedFieldValues(column.FieldName);
for (int i = 0; i < selectedRowValues.Count; i++){
if (selectedRowValues[i].ToString() != value.ToString()){
res = false;
break;
}
}
return res;
}
protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e){
DataTable dt = Session["GridDataSource"] as DataTable;
if (ASPxGridView1.Selection.Count == 1) {
DataRow row = dt.Rows.Find(e.Keys["ID"]) as DataRow;
row["File"] = e.NewValues["File"];
row["Folder"] = e.NewValues["Folder"];
}
if (ASPxGridView1.Selection.Count > 1){
List<object> selectedRowKeys = ASPxGridView1.GetSelectedFieldValues("ID");
for (int i = 0; i < selectedRowKeys.Count; i++){
DataRow row = dt.Rows.Find(selectedRowKeys[i]) as DataRow;
row["File"] = (e.NewValues["File"] == null) ? row["File"] : e.NewValues["File"];
row["Folder"] = (e.NewValues["Folder"] == null) ? row["Folder"] : e.NewValues["Folder"];
continue;
}
}
dt.AcceptChanges();
Session["GridDataSource"] = dt;
e.Cancel = true;
ASPxGridView1.CancelEdit();
}