0

さまざまな方法で使用する必要があるデータを含む 3 列の DataTable があります。この DataTable のデータは、Exchange Web サービス呼び出しから取得されます。最初の列には行カウンターが含まれ、2 番目の列にはカレンダー名が含まれ、3 番目の列にはカレンダー ID (意味不明な文字列) が含まれます。

生データを DataGridView に表示するのは簡単です。しかし、DataGridView の 2 番目の列は別のものにしたいと考えています。カレンダー ID を表示する代わりに、クリックするとカレンダー ID がユーザーのクリップボードにコピーされるテキスト (「コピー」) を表示したいと考えています。ハイパーリンクのようなスタイルにするのが理想的です。これにより、ユーザーはボックス内の単なるテキストではないことがわかります。これは、イベント ハンドラーを持つ DataGridViewLinkColumn 型で実行できると考えられます。

私が問題を抱えているのは、行の作成です。

次のコードは、列を適切に設定します。しかし、それは行を移入しません。

private static DataGridView CreateCalendarGridView(DataTable calendarTable)
{
    //Bind to the data source
    var calendarGridView = new DataGridView();
    //calendarGridView.AutoGenerateColumns = false;
    calendarGridView.AutoSize = false;
    calendarGridView.DataSource = calendarTable;
    calendarGridView.ColumnHeadersVisible = true;

    //Create counter column
    var counterColumn = new DataGridViewTextBoxColumn();
    counterColumn.DataPropertyName = COUNTER_COLUMN_NAME;
    counterColumn.Name = COUNTER_COLUMN_NAME;
    counterColumn.HeaderText = COUNTER_COLUMN_LABEL;

    //Create the Calendar name column
    var calendarNameColumn = new DataGridViewTextBoxColumn();
    calendarNameColumn.DataPropertyName = CALENDAR_COLUMN_NAME;
    calendarNameColumn.Name = CALENDAR_COLUMN_NAME;
    calendarNameColumn.HeaderText = CALENDAR_COLUMN_LABEL;

    //Create the Copy ID hyperlink column
    var copyIdLinkColumn = new DataGridViewLinkColumn();
    copyIdLinkColumn.DataPropertyName = ID_COLUMN_NAME;
    copyIdLinkColumn.Name = ID_COLUMN_NAME;
    copyIdLinkColumn.HeaderText = ID_COLUMN_NAME;
    copyIdLinkColumn.UseColumnTextForLinkValue = false;
    copyIdLinkColumn.TrackVisitedState = true;
    copyIdLinkColumn.LinkColor = Color.Blue;
    copyIdLinkColumn.VisitedLinkColor = Color.Purple;
    copyIdLinkColumn.LinkBehavior = LinkBehavior.HoverUnderline;
    copyIdLinkColumn.Text = "Copy";
    copyIdLinkColumn.UseColumnTextForLinkValue = true;

    calendarGridView.Columns.Add(counterColumn);
    calendarGridView.Columns.Add(calendarNameColumn);
    calendarGridView.Columns.Add(copyIdLinkColumn);



    //I feel like I'm missing a foreach row in the DataTable which would
    //create the row of cells, but I'm not sure, because isn't that the
    //point of the calendarGridView.DataSource assignment above?



    return calendarGridView;
}

行を埋めることができれば、クリック可能な 3 番目の列の動作を変更する方法を理解できると思います。

私は何を間違っていますか?

4

2 に答える 2