回覆列表
  • 1 # 使用者8107137581681

    DataGridView 控制元件提供了多種列型別,使得使用者可以透過多種方式輸入和編輯值。但是,如果這些列型別無法滿足資料輸入要求,您也可以使用承載所選控制元件的單元格建立自己的列型別。要做到這一點,必須定義派生自 DataGridViewColumn 和 DataGridViewCell 的類。您還必須定義派生自 Control 並實現 IDataGridViewEditingControl 介面的類。

    下面的程式碼示例演示如何建立日曆列。此列的單元格在普通的文字框單元格中顯示日期,但當用戶編輯單元格時,就會出現 DateTimePicker 控制元件。為了避免必須再次實現文字框顯示功能,CalendarCell 類從 DataGridViewTextBoxCell 類派生,而不是直接從 DataGridViewCell 類繼承。

    注意

    當從 DataGridViewCell 或 DataGridViewColumn 派生並向派生類新增新屬性時,請確保重寫 Clone 方法以便在克隆操作期間複製新屬性。還應呼叫基類的 Clone 方法,以便將基類的屬性複製到新的單元格或列中。

    using System;

    using System.Windows.Forms;

    public class CalendarColumn : DataGridViewColumn

    {

    public CalendarColumn() : base(new CalendarCell())

    {

    }

    public override DataGridViewCell CellTemplate

    {

    get

    {

    return base.CellTemplate;

    }

    set

    {

    // Ensure that the cell used for the template is a CalendarCell.

    if (value != null &&

    !value.GetType().IsAssignableFrom(typeof(CalendarCell)))

    {

    throw new InvalidCastException("Must be a CalendarCell");

    }

    base.CellTemplate = value;

    }

    }

    }

    public class CalendarCell : DataGridViewTextBoxCell

    {

    public CalendarCell()

    : base()

    {

    // Use the short date format.

    this.Style.Format = "d";

    }

    public override void InitializeEditingControl(int rowIndex, object

    initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)

    {

    // Set the value of the editing control to the current cell value.

    base.InitializeEditingControl(rowIndex, initialFormattedValue,

    dataGridViewCellStyle);

    CalendarEditingControl ctl =

    DataGridView.EditingControl as CalendarEditingControl;

    ctl.Value = (DateTime)this.Value;

    }

    public override Type EditType

    {

    get

    {

    // Return the type of the editing contol that CalendarCell uses.

    return typeof(CalendarEditingControl);

    }

    }

    public override Type ValueType

    {

    get

    {

    // Return the type of the value that CalendarCell contains.

    return typeof(DateTime);

    }

    }

    public override object DefaultNewRowValue

    {

    get

    {

    // Use the current date and time as the default value.

    return DateTime.Now;

    }

    }

    }

  • 中秋節和大豐收的關聯?
  • 現在投資什麼便宜的過十年後可以升值?