来自MSDN的一个Sample:如何自定义 Windows 窗体 DataGridView 控件中的数据格式设置

下面的代码示例演示如何实现一个 System.Windows.Forms.DataGridView.CellFormatting 事件的处理程序,该处理程序根据单元格的列和值更改单元格的显示方式。

Balance 列中包含负数的单元格被指定为红色背景。也可以将这些单元格的格式设置为货币格式以在负值两边显示圆括号。有关更多信息,请参见如何:设置 Windows 窗体 DataGridView 控件中的数据格式

Priority 列的单元格显示代替对应的文本单元格值的图像。DataGridViewCellFormattingEventArgsValue 属性既用于获取文本单元格值,也用于设置对应的图像显示值。

using System;
using 
System.Drawing;
using 
System.Windows.Forms;

public class Form1 
: Form
{
    private DataGridView dataGridView1 
= new DataGridView();
    private Bitmap highPriImage;
    private Bitmap mediumPriImage;
    private Bitmap lowPriImage;

    public Form1()
    {
        
// Initialize the images. 
        try
        {
            highPriImage 
= new Bitmap("highPri.bmp");
            mediumPriImage 
= new Bitmap("mediumPri.bmp");
            lowPriImage 
= new Bitmap("lowPri.bmp");
        }
        catch (ArgumentException)
        {
            MessageBox
.Show("The Priority column requires Bitmap images " +
                
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " +
                
"residing in the same directory as the executable file.");
        }

        
// Initialize the DataGridView.
        dataGridView1
.Dock = DockStyle.Fill;
        dataGridView1
.AllowUserToAddRows = false;
        dataGridView1
.Columns.AddRange(
            new DataGridViewTextBoxColumn()
,
            new DataGridViewImageColumn());
        dataGridView1
.Columns[0].Name = "Balance";
        dataGridView1
.Columns[1].Name = "Priority";
        dataGridView1
.Rows.Add("-100", "high");
        dataGridView1
.Rows.Add("0", "medium");
        dataGridView1
.Rows.Add("100", "low");
        dataGridView1
.CellFormatting +=
            new 
System.Windows.Forms.DataGridViewCellFormattingEventHandler(
            this
.dataGridView1_CellFormatting);
        this
.Controls.Add(dataGridView1);
    }

    
// Changes how cells are displayed depending on their columns and values.
    private void dataGridView1_CellFormatting(object sender
, 
        
System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
    {
        
// Set the background to red for negative values in the Balance column.
        
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Balance"))
        {
            Int32 intValue;
            
if (Int32.TryParse((String)e.Value, out intValue) && 
                (intValue 
< 0))
            {
                e
.CellStyle.BackColor = Color.Red;
                e
.CellStyle.SelectionBackColor = Color.DarkRed;
            }
        }

        
// Replace string values in the Priority column with images.
        
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Priority"))
        {
            
// Ensure that the value is a string.
            String stringValue 
= e.Value as string;
            
if (stringValue == null) return;

            
// Set the cell ToolTip to the text value.
            DataGridViewCell cell 
= dataGridView1[e.ColumnIndex, e.RowIndex];
            cell
.ToolTipText = stringValue;

            
// Replace the string value with the image value.
            switch (stringValue)
            {
                case 
"high":
                    e
.Value = highPriImage;
                    break;
                case 
"medium":
                    e
.Value = mediumPriImage;
                    break;
                case 
"low":
                    e
.Value = lowPriImage;
                    break;
            }
        }
    }

    public static void Main()
    {
        Application
.Run(new Form1());
    }

}

 

posted @ 2007-04-24 21:25  Kevin Lin  阅读(2272)  评论(0编辑  收藏  举报