SearchingValuesinDataGridViewinColumns我希望用户能够在DataGridView(dgv)中搜索列中的数字。dgv可以保存很多记录。每条记录都有一个项目编号。所以我希望用户能够在项目编号列中搜索项目编号。我的专栏是:ProjectID(不可见);图片(无标题文本);项目编号;项目名;公司;接触。这是我的代码:privatevoidbtnSearch_Click(objectsender,EventArgse){stringsearchValue=textBox1.Text;introwIndex=-1;dgvProjects.SelectionMode=DataGridViewSelectionMode.FullRowSelect;try{foreach(DataGridViewRowrowindgvProjects.Rows){if(row.Cells[row.Index].Value.ToString().Equals(searchValue)){rowIndex=row.Index;dgvProjects.Rows[row.Index].Selected=true;休息;}}}catch(Exceptionexc){MessageBox.Show(exc.Message);}}问题#1:到目前为止它做了什么:用户在TextBox1中键入项目编号。当他/她单击按钮时,代码将搜索该字符串的行,当它找到项目编号时,将选择该行。它工作正常,但只有一次。当我想搜索其他项目编号时,没有任何反应。问题2:我认为这可以通过仅搜索列项名称的值来以更好的方式完成。但是我该如何正确地做到这一点?我用来搜索的代码来自这个答案Whyuserow.Cells[row.Index]。您需要指定要搜索的列的索引(问题#2)。例如,您需要将row.Cells[row.Index]更改为row.Cells[2],其中2是列的索引:privatevoidbtnSearch_Click(objectsender,EventArgse){stringsearchValue=textBox1.Text;dgvProjects.SelectionMode=DataGridViewSelectionMode.FullRowSelect;try{foreach(DataGridViewRowrowindgvProjects.Rows){if(row.Cells[2].Value.ToString().Equals(searchValue)){row.Selected=true;休息;}}}catch(Exceptionexc){MessageBox.Show(exc.Message);为什么不先构建DataTable,然后将其作为DataSource分配给DataGridView:DataTabletable4DataSource=newDataTable();table4DataSource.Columns.Add("col00");table4DataSource.Columns.Add("col01");table4DataSource.Columns.Add("col02");...(手动添加行,循环或通过数据库表中的DataReader)(分配数据源)dtGrdViewGrid.DataSource=table4DataSource;然后使用:(dtGrdViewGrid.DataSourceasDataTable).DefaultView.RowFilter="col00='"+textBoxSearch.Text+"'";dtGrdViewGrid.Refresh();您甚至可以将此代码放在textbox_textchange事件中,并在您编写时显示过滤后的值。//这是datagridview中搜索工具的确切代码。privatevoidbuttonSearch_Click(objectsender,EventArgse){stringsearchValue=textBoxSearch.Text;int行索引=1;//这个取决于单元格或列的位置//stringfirst_row_data=dataGridView1.Rows[0].Cells[0].Value.ToString();dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;尝试{boolvalueResulet=true;foreach(dataGridView1.Rows中的DataGridViewRow行){if(row.Cells[rowIndex].Value.ToString().Equals(searchValue)){rowIndex=row.Index;dataGridView1.Rows[rowIndex].Selected=true;行索引++;valueResulet=false;}}if(valueResulet!=false){MessageBox.Show("RecordisnotavalableforthisName"+textBoxSearch.Text,"NotFound");返回;}}catch(Exceptionexc){MessageBox.Show(exc.Message);}}直接从DataTable或Dataset过滤Dataset:"MyTable".DefaultView.RowFilter="LIKE'%"+textBox1.Text+"%'";这个.dataGridView1.DataSource="MyTable".DefaultView;在文本框事件KeyUp上使用此代码,将“MyTable”替换为表名或数据集,替换要搜索的字段“MyTable”。DefaultView.RowFilter=“LIKE'%”+textBox1.Text+“%'";this.dataGridView1.DataSource="MyTable".DefaultView;如何与数据库连接和数据表建立关系?我应该如何正确设置DefaultView?我使用这段代码来获取数据:con=newSystem.Data.SqlServerCe.SqlCeConnection();con.ConnectionString="DataSource=C:\Users\mhadj\Documents\VisualStudio2015\Projects\data_base_test_2\Sample.sdf";con.Open();DataTabledt=newDataTable();adapt=newSystem.Data.SqlServerCe.SqlCeDataAdapter("select*fromtbl_Record",con);适应.填充(dt);dataGridView1.DataSource=dt;con.Close();最好将逻辑分离到另一个方法或另一个类中。此方法将帮助您检索找到文本的DataGridViewCell对象。以上就是C#学习教程:搜索专栏DataGridView中的valuesharing。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—//////CheckagiventextifthegiventextexistsinthegivenDataGridViewatagivencolumnindex//////////////在其中找到searchText的单元格privateDataGridViewCellGetCellWhereTextExistsInGridView(stringsearchText,DataGridViewdataGridView,intcolumnIndex){//对于网格中的每一行(显然)foreach(DataGridViewRowrowindataGridView.Rows){//我没有测试这种情况,但cell.Value是一个对象,对象可以为null//所以检查单元格是否在使用.ToString()之前为nullif(row.Cells[columnIndex].Value!=null&&searchText==row.Cells[columnIndex].Value.ToString()){//searchText等于此中的文本cell.cellWhereTextIsMet=row.Cells[columnIndex];休息;}}返回cellWhereTextIsMet;}privatevoidbutton_click(objectsender,EventArgse){DataGridViewCell单元格=GetCellWhereTextExistsInGridView(textBox1.Text,myGridView,2);if(cell!=null){//值存在于网格中//你可以在单元格上做额外的事情cell.Style=newDataGridViewCellStyle{ForeColor=Color.Red};}else{//网格中不存在值}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
