开发者

Search in DataGridView (Excel File) + c#

I have a problem :-) I try to make a quick search with highlighting in a datagridview.

In my data开发者_运维百科gridview is an excel sheet.

        try
        {
            System.Data.OleDb.OleDbConnection MyConnection;
            System.Data.DataSet DtSet;
            System.Data.OleDb.OleDbDataAdapter MyCommand;
            MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\test2.xls';Extended Properties=Excel 8.0;");
            MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
            MyCommand.TableMappings.Add("Table", "TestTable");
            DtSet = new System.Data.DataSet();
            MyCommand.Fill(DtSet);
            dataGridView1.DataSource = DtSet.Tables[0];
            MyConnection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

And I need it like this:

Search in DataGridView (Excel File) + c#

I have no idea, I hope someone can help me :-)

Thank you very mutch


1 - Load from excel to datatable ( which you already did it) then save DataTable to global Variable

2- When search clicked use DataTable.Select : example or since you are using oledb you can again select your excel with a simple query instead of Datatable select, up to you, you might give it a try if datatable select's performance is poor. Example excel searching

3- then Highlight your text in datagrid, i havent used windows forms such a long time , but maybe http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/43f6b81f-4cb7-4e8e-bd29-e3645f200734/ might be a clue for you

Ok I used links i provided so far so good, except highliht everything work:

A Simple Helper class for reading excel and searching in DataTable:

public class ExcelHelper
    {
        public static DataTable LoadXLS(string strFile, String sheetName)
        {
            DataTable dtXLS = new DataTable(sheetName);
            try
            {
                string strConnectionString = "";
                if (strFile.Trim().EndsWith(".xlsx"))
                {
                    strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", strFile);
                }
                else if (strFile.Trim().EndsWith(".xls"))
                {
                    strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", strFile);
                }
                OleDbConnection SQLConn = new OleDbConnection(strConnectionString);
                SQLConn.Open();
                OleDbDataAdapter SQLAdapter = new OleDbDataAdapter();
                string sql = "SELECT * FROM [" + sheetName + "$] "; // "WHERE " + column + " = " + value;
                OleDbCommand selectCMD = new OleDbCommand(sql, SQLConn);
                SQLAdapter.SelectCommand = selectCMD;

                SQLAdapter.Fill(dtXLS);
                SQLConn.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return dtXLS;
        }

        public  static DataTable QueryDataTable(DataTable dt, string column,string value)
        {
            var drs =  dt.Select(String.Format("{0} LIKE '%{1}%'", column, value));
            DataTable dt2 = dt.Clone();
            foreach (var dataRow in drs)
            {
                dt2.ImportRow(dataRow);
            }
            return dt2;
        }
    }

Hope this helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜