0

データを含むデータグリッドビューがあり、データ行は次のように色付けされています (テキストの色のみ): 赤、オレンジ、黒など:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
  switch (e.Value.ToString())
            {
                case "SDP":
                    e.Value = "Schedule Departure";
                    this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
                    break;
                case "CKN":
                    e.Value = "Check-In";
                    this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Orange;
                    break;
                case "P2G":
                    e.Value = "Proceed to Gate";
                    this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
                    break;
}

また、ソーリングを変更するためのラジオボタンがほとんどないグループボックスを作成します

    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        ListSortDirection direction;
        direction = ListSortDirection.Ascending;
        dataGridView1.Sort(arrTimeDataGridViewTextBoxColumn,direction);
    }

しかし問題は、テキストの色に応じて並べ替えを変更するにはどうすればよいかということです。たとえば、RED、ORANGE、Black のようになります。

4

1 に答える 1

1

datagridviewの数を保持できる場所に列を作成しますForeColor。例えば ​​:

列の名前はdataGridView_ForeColorNum、値は次のようになります。

RED = 1
ORANGE = 2
BLACK = 3

次に、ハンドラーで、行のdataGridView1_CellFormatting変更と同時にこの値を設定しますForeColor

cswitch (e.Value.ToString())
{
    case "SDP":
        e.Value = "Schedule Departure";
        this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
        this.dataGridView1.Rows[e.RowIndex].Cells[dataGridView_ForeColorNum.Name].Value = 1;     
        break;
    case "SKN":
        e.Value = "Check-In";
        this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Orange;
        this.dataGridView1.Rows[e.RowIndex].Cells[dataGridView_ForeColorNum.Name].Value = 2;
        break;
    case "P2G":
        e.Value = "Proceed to gate";
        this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
        this.dataGridView1.Rows[e.RowIndex].Cells[dataGridView_ForeColorNum.Name].Value = 3;            break;


}

並べ替えは通常どおりですが、ForeColor に指定された番号で新しい列を並べ替えるために使用します。

 private void radioButton1_CheckedChanged(object sender, EventArgs e)
 {
     ListSortDirection direction;
     direction = ListSortDirection.Ascending;
     dataGridView1.Sort(dataGridView_ForeColorNum,direction);
 }

IsDataBoundデータ バインドされた DataGridView の場合、事前定義された列のプロパティ= Falseであるため、以前のソリューションは機能しません。MSDN:datagridview.Sort

この場合、私の頭に浮かんだ最初の回避策は次のとおりです。

SQL クエリで、ステートメントForeColorを使用して数値を設定する列をもう 1 つ追加します。CASE WHEN

CASE yourValueColumn
WHEN 'SDP' THEN 1
WHEN 'SKN' THEN 2
WHEN 'P2G' THEN 3
ELSE 0 END AS ForeColor

datagridview の事前定義された列dataGridView_ForeColorNumセットのプロパティDataProperty = "ForeColor"datagridview_CellFormattingハンドラーでは、次のようになります。

{
    if(this.datagridview1.Columns[e.ColumnIndex].Name != this.dataGridView_ForeColorNum.Name)
        return;
    //if column is ForeColumn then set a ForeColor independent on the column value
    switch ((int)e.Value)
    {
        case 1: //SDP
            e.Value = "Schedule Departure";
            this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;     
            break;
        case 2: //SKN
            e.Value = "Check-In";
            this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Orange;
            break;
        case 3: //P2G
            e.Value = "Proceed to gate";
            this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
            break;
    }
}
于 2013-04-14T10:43:34.663 に答える