DevExpress.XtraGrid.GridControl控制元件使用
設定列只讀
// You can handle the ShowingEditor event to cancel editor activation
gridView.ShowingEditor += (s, e) => {
e.Cancel = gridView.FocusedColumn.FieldName == "ID" && gridView.FocusedRowHandle % 2 == 0;
};
列新增按鈕
// Create the Commands column editor
RepositoryItemButtonEdit
commandsEdit.Buttons.Clear();
commandsEdit.Buttons.AddRange(new EditorButton[] {
new
EditorButton(ButtonPredefines.Glyph, "Edit", -1, true, true
new EditorButton(ButtonPredefines.Glyph, "Delete", -1, true, true, false, ImageLocation.MiddleLeft, DemoHelper.GetDeleteImage())});
// Create an unbound Commands column
GridColumn commandsColumn = gridView.Columns.AddField("Commands"
commandsColumn.UnboundType = UnboundColumnType.Object;
commandsColumn.Visible = true;
commandsColumn.Width = 100;
// Hide commandsColumn from EditForm
commandsColumn.OptionsEditForm.Visible = DevExpress.Utils.DefaultBoolean.False;
// Display commands only for focused row
gridView.CustomRowCellEdit += (s, e) => {
if (e.RowHandle == gridView.FocusedRowHandle && e.Column == commandsColumn)
e.RepositoryItem = commandsEdit;
};
gridView.CustomRowCellEditForEditing += (s, e) => {
if (e.RowHandle == gridView.FocusedRowHandle && e.Column == commandsColumn)
e.RepositoryItem = commandsEdit;
};
// Allow only commandsColumn to be edited
gridView.ShowingEditor += (s, e) => {
e.Cancel = gridView.FocusedColumn != commandsColumn;
};
// Perform a specific action when an EditorButton is clicked
commandsEdit.ButtonClick += (s, e) => {
switch (e.Button.Caption) {
case "Edit":
// Start edit a row using EditForm
gridView.OptionsBehavior.EditingMode = GridEditingMode.EditFormInplace;
gridControl.BeginInvoke(new MethodInvoker(() => { gridView.ShowEditForm(); }));
break;
case "Delete":
// Delete focused row
gridControl.BeginInvoke(new MethodInvoker(() => { gridView.DeleteRow(gridView.FocusedRowHandle); }));
break;
}
};
// End the current row editing
EventHandler visibleChanged = null;
visibleChanged = (s, e) => {
Control c = s as Control;
if (!c.Visible)
gridControl.BeginInvoke(new MethodInvoker(() => { gridView.OptionsBehavior.EditingMode = GridEditingMode.Default; }));
c.VisibleChanged -= visibleChanged;
};
gridView.EditFormPrepared += (s, e) => {
e.Panel.VisibleChanged += visibleChanged;
};
非繫結列編輯
// Creating an unbound column that supports editing
GridColumn unboundColumn = gridView.Columns.AddField("CustomData");
unboundColumn.UnboundType = UnboundColumnType.String;
unboundColumn.Visible = true;
// Handling the CustomUnboundColumnData event
Dictionary<int, string> unboundData = new Dictionary<int, string>();
unboundData[5] = "Can live up to 20 years!";
gridView.CustomUnboundColumnData += (sender, e) =>
{
if(e.Column.FieldName == "CustomData") {
if(e.IsGetData) {
if(unboundData.ContainsKey(e.ListSourceRowIndex))
e.Value = unboundData[e.ListSourceRowIndex];
}
if(e.IsSetData && e.Value != null) {
unboundData[e.ListSourceRowIndex] = e.Value.ToString();
}
}
};
新行 預設資料
gridView.OptionsView.NewItemRowPosition = NewItemRowPosition.Top;
//Handle the InitNewRow event to initialize newly added rows. To initialize row cells use the SetRowCellValue method
gridView.InitNewRow += (s, e) => {
GridView view = s as GridView;
view.SetRowCellValue(e.RowHandle, view.Columns["RecordDate"], DateTime.Today);
view.SetRowCellValue(e.RowHandle, view.Columns["Name"], "CustomName");
view.SetRowCellValue(e.RowHandle, view.Columns["Notes"], "New Note");
};