新手@@小弟想实现winform的功能:datagridview的某列是DataGridViewTextBoxColumn数据列有“aaaqqq”、“aaa”,如果编辑DataGridViewTextBoxColumn列的时候输入“q”,那么回车自动弹出“aaaqqq”。如果输入“aa”就回车会弹出“aaaqqq”、“aaa” 这些信息来选择。如果输入其他以外的数据会提示 “没有该信息”。 问题关键是怎么不输入开头的字母也能查询对应的信息,还有怎么判断没有该数据。谁能指导一下,可以加QQ 1434345614远程帮我解决下。小弟感激不尽!!!!!!!
解决方案 »
- [wpf]VisualTreeHelper.GetChildrenCount返回的值有问题
- 数据导出问题
- 关于移除FORM中的BUTTON控件
- 如何让网站 像exe 文件发到桌面快捷方式放到桌面上
- 给TextBox控件扩展属性
- 如何实现 “瑞星小助手”(就是那个狮子) 那样的功能 ?
- winform 关闭时候会触发什么事件?
- 关于IHTMLDocument2中有关ActiveElement的问题
- 自定义纸张问题,为什么自定义了以后,打印走纸还是不变?
- 新手问题:无法加载mfc42d.dll
- C/S架构下用的是同一套程序吗
- C# SerialPort.DataReceived 是不是在后台线程里运行
点击编辑后获取TextBoxColumn
然后在输入的时候在写你的逻辑
{
DataGridViewTextBoxEditingControl te = (DataGridViewTextBoxEditingControl)e.Control;
te.Name = "字段名";
te.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
te.AutoCompleteSource = AutoCompleteSource.CustomSource;
SqlConnection conn1 = new SqlConnection(str);
conn1.Open();
string comand2 = @"select * from studentInfo";
SqlDataAdapter adatter2 = new SqlDataAdapter(comand2, conn1);
DataSet dataset2 = new DataSet();
adatter2.Fill(dataset2, "表名");
string[] itemsg = new string[dataset2.Tables["studentInfo"].Rows.Count];
int col = dataGridView1.CurrentCell.ColumnIndex;
switch (col)
{
case 0:
//for (int i = 0; i < dataset2.Tables["studentInfo"].Rows.Count; i++)
//{
// itemsg[i] = dataset2.Tables["studentInfo"].Rows[i][0].ToString();
// te.AutoCompleteCustomSource.AddRange(new string[] { itemsg[i] });
//}
break;
case 1:
for (int i = 0; i < dataset2.Tables["表名"].Rows.Count; i++)
{
itemsg[i] = dataset2.Tables["studentInfo"].Rows[i]["字段名"].ToString();
te.AutoCompleteCustomSource.AddRange(new string[] { itemsg[i] });
}
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
break;
}
}代码要改哪里才有效果啊!!!!!!!!!!!!!!
新建一个BindingSource对象, private BindingSource bind = new BindingSource();
将该bind.DataSource设置为装载了“aaaqqq”、“aaa”的DataTable, bind.DataSource = YourDataTable;
然后将 DataGridViewTextBoxColumn 的数据源设置为bind;最后在 DataGridViewTextBoxColumn 的 ValueChange 事件中, 设置bind的Filter字符串就行了。
如下:bind.Filter = string.Format("DataTable列名 Like 'DataGridViewTextBoxColumn中内容值%' ");
这样就可以了。 依照这个思路,自己去实现吧。
select * from table1 where name like '%q%'
select * from table1 where name like '%a%'
还是说要在字符串里面查找
String.IndexOf (Char, Int32, Int32)方法
String.IndexOf (‘q', 0, 10);
没效果
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if(dataGridView1.Rows[i].Cells[1].Value.ToString().Contains("aaa"))
{
}
}
我照着你的思路实现了一下,不行的,你再帮忙指点一下? public partial class ColumnAutoComplete2 : Form
{
DataSet sqlDs;
BindingSource bs; DataGridViewTextBoxEditingControl te;
int rowIndex = -1;
int colIndex = -1; public ColumnAutoComplete2()
{
InitializeComponent();
} private void ColumnAutoComplete2_Load(object sender, EventArgs e)
{
sqlDs =new DataSet(); DataTable dt = new DataTable("产品表");
DataColumn columnProductID = new DataColumn("ProductID", System.Type.GetType("System.String"));
dt.Columns.Add(columnProductID); DataRow dr1 = dt.NewRow();
dr1["ProductID"] = "aaaqqq";
dt.Rows.Add(dr1); DataRow dr2=dt.NewRow();
dr2["ProductID"] = "aaa";
dt.Rows.Add(dr2); sqlDs.Tables.Add(dt);
dataGridView1.DataSource=sqlDs.Tables["产品表"]; bs = new BindingSource(sqlDs, "产品表"); } private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
te=(DataGridViewTextBoxEditingControl)e.Control; te.Name = "ProductID";
if (te.DataBindings.Count == 0)
te.DataBindings.Add("Text", bs, "ProductID"); te.KeyDown += new KeyEventHandler(te_KeyDown);
}
} private void te_KeyDown(object sender, KeyEventArgs e)
{
bs.Filter = string.Format("ProductID like '" + dataGridView1.Rows[rowIndex].Cells[colIndex].Value + "%'");
te.Refresh();
} private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
rowIndex = e.RowIndex;
colIndex = e.ColumnIndex;
}
}
}