<<XtraGrid Use Tips>> (2)
8. 在最左侧显示行号
view.CustomDrawRowIndicator += this.GridView_CustomDrawRowIndicator;
view.RowCountChanged += this.GridView_RowCountChanged;
protected void GridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
if (e.Info.IsRowIndicator)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
}
protected void GridView_RowCountChanged(object sender, EventArgs e)
{
GridView gv = sender as GridView;
if (gv == null)
return;
if (gv.RowCount <= 0)
{
gv.IndicatorWidth = -1;
}
else
{
gv.IndicatorWidth = 25 + Convert.ToInt32(Math.Floor(Math.Log(gv.RowCount, 10)) + 1) * 5;
}
}
protected void GridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
if (e.Info.IsRowIndicator)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
}
protected void GridView_RowCountChanged(object sender, EventArgs e)
{
GridView gv = sender as GridView;
if (gv == null)
return;
if (gv.RowCount <= 0)
{
gv.IndicatorWidth = -1;
}
else
{
gv.IndicatorWidth = 25 + Convert.ToInt32(Math.Floor(Math.Log(gv.RowCount, 10)) + 1) * 5;
}
}
9. 添加右键菜单
view.ShowGridMenu += this.GridView_ShowGridMenu;
protected void GridView_ShowGridMenu(object sender, GridMenuEventArgs e)
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column)
{
DevExpress.XtraGrid.Menu.GridViewColumnMenu menu = e.Menu as GridViewColumnMenu;
DXMenuItem saveItem = new DXMenuItem("&Save Layout", new EventHandler(OnSaveLayoutMenuItemClicked));
saveItem.BeginGroup = true;
saveItem.Tag = sender;
menu.Items.Add(saveItem);
DXMenuItem loadItem = new DXMenuItem("&Load Default Layout", new EventHandler(OnLoadDefaultLayoutMenuItemClicked));
loadItem.Tag = sender;
menu.Items.Add(loadItem);
DXMenuItem exportToXlsItem = new DXMenuItem("&Export To Xls", new EventHandler(OnExportToXlsMenuItemClicked));
exportToXlsItem.Tag = sender;
menu.Items.Add(exportToXlsItem);
DXMenuItem exportToXlsxItem = new DXMenuItem("E&xport To Xlsx", new EventHandler(OnExportToXlsxMenuItemClicked));
exportToXlsxItem.Tag = sender;
menu.Items.Add(exportToXlsxItem);
}
}
protected void GridView_ShowGridMenu(object sender, GridMenuEventArgs e)
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column)
{
DevExpress.XtraGrid.Menu.GridViewColumnMenu menu = e.Menu as GridViewColumnMenu;
DXMenuItem saveItem = new DXMenuItem("&Save Layout", new EventHandler(OnSaveLayoutMenuItemClicked));
saveItem.BeginGroup = true;
saveItem.Tag = sender;
menu.Items.Add(saveItem);
DXMenuItem loadItem = new DXMenuItem("&Load Default Layout", new EventHandler(OnLoadDefaultLayoutMenuItemClicked));
loadItem.Tag = sender;
menu.Items.Add(loadItem);
DXMenuItem exportToXlsItem = new DXMenuItem("&Export To Xls", new EventHandler(OnExportToXlsMenuItemClicked));
exportToXlsItem.Tag = sender;
menu.Items.Add(exportToXlsItem);
DXMenuItem exportToXlsxItem = new DXMenuItem("E&xport To Xlsx", new EventHandler(OnExportToXlsxMenuItemClicked));
exportToXlsxItem.Tag = sender;
menu.Items.Add(exportToXlsxItem);
}
}
需要在ValidateRow事件中进行验证,效果(当右键点击column的时候,添加4个MenuItem)
10. 验证某行的输入值
需要在ValidateRow事件中进行验证
private void gridViewMain_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
try
{
if (string.IsNullOrEmpty( this.gridViewMain.GetRowCellDisplayText(e.RowHandle ,this.gridColumn1)))
{
this.ShowExclamationMessage("Must input gridColumn1.");
this.gridViewMain.FocusedColumn = this.gridColumn1;
e.Valid = false;
return;
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
{
try
{
if (string.IsNullOrEmpty( this.gridViewMain.GetRowCellDisplayText(e.RowHandle ,this.gridColumn1)))
{
this.ShowExclamationMessage("Must input gridColumn1.");
this.gridViewMain.FocusedColumn = this.gridColumn1;
e.Valid = false;
return;
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
这样做了还是会弹出Grid自带的确认框,如果不要弹出再添加以下事件
private void gridViewMain_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
{
try
{
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
{
try
{
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
11. Binding的值可以是属性的属性(对泛型支持不好)
this.gridColumn4.FieldName = "Function.FunctionCode";
12. 导出到Excel完整代码(优化了速度)
private static void ExportToEx(String filename, string ext, BaseView view)
{
Cursor currentCursor = Cursor.Current;
try
{
Cursor.Current = Cursors.WaitCursor;
if (ext == "rtf")
{
view.ExportToRtf(filename);
}
if (ext == "pdf")
{
view.ExportToPdf(filename);
}
if (ext == "mht")
{
view.ExportToMht(filename);
}
if (ext == "htm")
{
view.ExportToHtml(filename);
}
if (ext == "txt")
{
view.ExportToText(filename);
}
if (ext == "xls")
{
XlsExportOptions item = new DevExpress.XtraPrinting.XlsExportOptions();
item.ShowGridLines = false;
item.Suppress256ColumnsWarning = true;
item.Suppress65536RowsWarning = true;
item.ExportHyperlinks = false;
item.TextExportMode = TextExportMode.Text;
view.ExportToXls(filename,item);
}
if (ext == "xlsx")
{
XlsxExportOptions item=new XlsxExportOptions(TextExportMode.Text ,false ,false);
view.ExportToXlsx(filename, item);
}
}
finally
{
Cursor.Current = currentCursor;
}
}
{
Cursor currentCursor = Cursor.Current;
try
{
Cursor.Current = Cursors.WaitCursor;
if (ext == "rtf")
{
view.ExportToRtf(filename);
}
if (ext == "pdf")
{
view.ExportToPdf(filename);
}
if (ext == "mht")
{
view.ExportToMht(filename);
}
if (ext == "htm")
{
view.ExportToHtml(filename);
}
if (ext == "txt")
{
view.ExportToText(filename);
}
if (ext == "xls")
{
XlsExportOptions item = new DevExpress.XtraPrinting.XlsExportOptions();
item.ShowGridLines = false;
item.Suppress256ColumnsWarning = true;
item.Suppress65536RowsWarning = true;
item.ExportHyperlinks = false;
item.TextExportMode = TextExportMode.Text;
view.ExportToXls(filename,item);
}
if (ext == "xlsx")
{
XlsxExportOptions item=new XlsxExportOptions(TextExportMode.Text ,false ,false);
view.ExportToXlsx(filename, item);
}
}
finally
{
Cursor.Current = currentCursor;
}
}
13. 删除一行记录
比如选中某一行的时候,你按CTRL+Del删除,需要在ProcessGridKey中处理
private void gridMain_ProcessGridKey(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Delete && e.Control && this.gridViewMain.FocusedRowHandle >= 0)
{
object item = this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle) ;
if (item == null)
{
return;
}
else
{
if (this.ShowYesNoQuestionMessage(string.Format("Are you sure to delete the row?")) == DialogResult.Yes)
{
//do delete
}
}
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
{
try
{
if (e.KeyCode == Keys.Delete && e.Control && this.gridViewMain.FocusedRowHandle >= 0)
{
object item = this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle) ;
if (item == null)
{
return;
}
else
{
if (this.ShowYesNoQuestionMessage(string.Format("Are you sure to delete the row?")) == DialogResult.Yes)
{
//do delete
}
}
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
14. 设置某个单元格是否可编辑
光设置属性不可以的,只能设置整个GridView或某一列是否可编辑(Editable).在ShowingEditor事件中处理
private void gridViewMain_ShowingEditor(object sender, CancelEventArgs e)
{
try
{
if (this.gridViewMain.FocusedRowHandle < 0 )
{
return;
}
Object item = this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle);
if (this.gridViewMain.FocusedColumn.Equals (this.gridColumn1) && Condition(item))
{
//Item满足一定的条件,不允许编辑
e.Cancel = true;
return;
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
{
try
{
if (this.gridViewMain.FocusedRowHandle < 0 )
{
return;
}
Object item = this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle);
if (this.gridViewMain.FocusedColumn.Equals (this.gridColumn1) && Condition(item))
{
//Item满足一定的条件,不允许编辑
e.Cancel = true;
return;
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
}
}
看灰机