您的位置:首页 > 编程语言 > C#

C# DataGridView中实现类似ComboBox可编辑的下拉框功能

2009-09-29 08:56 721 查看
using System;


using System.ComponentModel;


using System.Drawing;


using System.Windows.Forms;


//此Form中有两个控件,一个DataGridView(dataGridView1),一个ComboBox(comboBox1)


//DataGridView中有两列(都是DataGridViewTextBoxColumn的),其中第一列实现类似ComboBox的功能


//第一列中只有正在编辑的Cell才会显示ComboBox,其他的不会显示,这样好看一点


namespace Test






{


public partial class Form1 : Form






{


private int comboBoxColumnIndex = 0; // DataGridView的首列




public Form1()






{


InitializeComponent();


InitComboBoxValues();


this.dataGridView1.Controls.Add(this.comboBox1);


this.dataGridView1.CellEnter += new DataGridViewCellEventHandler(dataGridView1_CellEnter);


this.dataGridView1.CellLeave+=new DataGridViewCellEventHandler(dataGridView1_CellLeave);


}




private void InitComboBoxValues()






{




this.comboBox1.Items.AddRange(new String[]

{ "Beijing", "Shanghai", "Guangzhou", "Wuhan", "Shenzhen" });


this.comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest; //输入提示


this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;


}




private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)






{


if (e.ColumnIndex == comboBoxColumnIndex)






{


//此处cell即CurrentCell


DataGridViewCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];


Rectangle rect = this.dataGridView1.GetCellDisplayRectangle(cell.ColumnIndex, cell.RowIndex, true);


this.comboBox1.Location = rect.Location;


this.comboBox1.Size = rect.Size;


comfirmComboBoxValue(this.comboBox1, (String)cell.Value);


this.comboBox1.Visible = true;


}


}




private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)






{


if (e.ColumnIndex == comboBoxColumnIndex)






{


//此处cell不为CurrentCell


DataGridViewCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];


cell.Value = this.comboBox1.Text;


this.comboBox1.Visible = false;


}


}




private void comfirmComboBoxValue(ComboBox com, String cellValue)






{


com.SelectedIndex = -1;


if (cellValue == null)






{


com.Text = "";


return;


}


com.Text = cellValue;


foreach (Object item in com.Items)






{


if ((String)item == cellValue)






{


com.SelectedItem = item;


}


}


}


}


}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: