Как установить столбец DataGridView, передавая другой столбец? - PullRequest
0 голосов
/ 24 марта 2020

Как передать столбец календаря в уже существующий столбец таблицы данных или как установить для столбца календаря уже существующий столбец?

Я заменил столбец таблицы данных как столбец календаря, используя этот код Привести столбец таблицы данных как тип календаря . Все работает нормально, но я хочу передать этот столбец в уже существующий столбец в виде сетки данных. Это работает нормально, когда я использую этот лог c:

metroGrid1.Columns.Add(col);
col.HeaderText = "Mfg. Date";
col.Name = "mfg_+date";

Но не работает, когда я использую этот код:

CalendarColumn col = new CalendarColumn();
metroGrid1.Columns["mfg_date"].DefaultCellStyle. = col;

Как я могу отладить это?

1 Ответ

0 голосов
/ 24 марта 2020

По указанной ссылке https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-host-controls-in-windows-forms-datagridview-cells?redirectedfrom=MSDN

В следующем примере кода показано, как создать столбец календаря. В ячейках этого столбца отображаются даты в обычных ячейках текстового поля, но когда пользователь редактирует ячейку, появляется элемент управления DateTimePicker.

Add DateTimePicker in Datagridview in C#

Нашел этот пример (я не знаю, какая публикация ссылки на другой сайт здесь в порядке или нет, поэтому я копирую ее, или вы можете искать ' Добавить DateTimePicker в Datagridview в C#'):

DateTimePicker dtp = new DateTimePicker();  
Rectangle _Rectangle;  

public Form1()
{
    InitializeComponent();

    dataGridView1.Controls.Add(dtp);    
    dtp.Visible = false;  
    dtp.Format = DateTimePickerFormat.Custom;   
    dtp.TextChanged += new EventHandler(dtp_TextChange);
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    switch (dataGridView1.Columns[e.ColumnIndex].Name)
    {
        case "Column2":

            _Rectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); //  
            dtp.Size = new Size(_Rectangle.Width, _Rectangle.Height); //  
            dtp.Location = new Point(_Rectangle.X, _Rectangle.Y); //  
            dtp.Visible = true;

            break;
    }
}

private void dtp_TextChange(object sender, EventArgs e)
{
    dataGridView1.CurrentCell.Value = dtp.Text.ToString();
}

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
    dtp.Visible = false;
}

private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
    dtp.Visible = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...