最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WinForm使用DataGridView實現(xiàn)類似Excel表格的查找替換功能

 更新時間:2021年07月22日 09:59:18   作者:XSpringSun  
這篇文章主要介紹了WinForm使用DataGridView實現(xiàn)類似Excel表格的查找替換功能,現(xiàn)在小編通過本文給大家分享查找替換實現(xiàn)過程,需要的朋友可以參考下

在桌面程序開發(fā)過程中我們常常使用DataGridView作為數(shù)據(jù)展示的表格,在表格中我們可能要對數(shù)據(jù)進行查找或者替換。
其實要實現(xiàn)這個查找替換的功能并不難,記錄下實現(xiàn)過程,不一定是最好的方式,但它有用!
先看demo下效果

1、數(shù)據(jù)展示建一個WinForm窗體 GridDataWindow ,放上菜單和DataGridView控件,添加4列用來顯示信息。

創(chuàng)建一個Person類用于顯示數(shù)據(jù)

public class Person
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
    }

在窗體Load事件里面初始化顯示數(shù)據(jù)

2、查找替換窗體建一個WinForm窗體 DataToolsWindow

這個窗體主要是用來控制查找和替換的文本,選擇范圍是當前列還是整個數(shù)據(jù)表格。
窗體中主要是查找替換文本的值,選中的查找范圍和是否能設置查找范圍變量;還包括4個事件,4個事件在GridDataWindow 中添加用于響應操作。

  • LookUpHandler:點擊查找,根據(jù)選擇的范圍和值依次查找表格單元格。
  • ReplaceHandler:替換文本,根據(jù)選擇的范圍和值依次查找表格單元格,如果查找到則替換。
  • ReplaceAllHandler:全部替換,根據(jù)選擇的范圍和值依次查找所有表格單元格,查找到并全部替換。WindownClosedHandler:窗體關閉,當查找窗體關閉后主窗體得到通知并做些需要的邏輯。
public event EventHandler LookUpHandler;

public event EventHandler ReplaceHandler;

public event EventHandler ReplaceAllHandler;

public event EventHandler WindownClosedHandler;

public bool AllLookup
{
    get
    {
        if (cbRange.SelectedIndex == 1)
            return true;
        else
            return false;
    }
    set
    {

        if (value)
        {
            cbRange.SelectedIndex = 1;
        }
        else
        {
            cbRange.SelectedIndex = 0;
        }
    }
}

public bool CanSetRang
{
    set
    {
        btnLookup.Enabled = false;
        btnReplace.Enabled = false;
        btnAllReplace.Enabled = false;
    }
}

public string LookupContent
{
    get { return txtLookup.Text; }
    set { txtLookup.Text = value; }
}

public string ReplaceContent
{
    get { return txtReplace.Text; }
}

3、如何查找替換

實例化一個DataToolsWindow后對事件進行注冊。重點是如何查找,因為替換和查找一樣,只要查找到了替換就行了。

  • 查找下一個

大概的思路就是按照【選定】的當前單元格為標記,首先以當前單元格為分界線向下查找,在查找的過程中判斷用戶選擇的是當前列還是整個數(shù)據(jù)表,如果是當前列只需要按行查找當前列就行了。
如果是整個數(shù)據(jù)表查找則需要整行的每列都查找,如果查找到選中行查找的列就是找當前列前面的列(后面的列會在向下查找中遍歷到),如果不是選中行則整行從第一列開始全部列查找。
同理,向下查找的思路也就出來了。

private void ToolsWindow_LookUpHandler(object sender, EventArgs e)
{
    int currentRowIndex = dgvPeople.CurrentCell.RowIndex;
    int currentColumnIndex = dgvPeople.CurrentCell.ColumnIndex;
    foreach (DataGridViewRow row in dgvPeople.Rows)
    {
        //向下查找
        if (row.Index >= currentRowIndex)
        {
            if (toolsWindow.AllLookup)
            {
                //如果是當前選中行 則查找后面的列
                if (currentRowIndex == row.Index)
                {
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        if (cell.ColumnIndex > currentColumnIndex)
                        {
                            if (cell.Value != null && cell.Value.ToString().Contains(toolsWindow.LookupContent))
                            {
                                cell.Selected = true;
                                dgvPeople.CurrentCell = cell;
                                return;
                            }
                        }
                    }
                }
                else
                { //否則從第一列開始查找
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        if (cell.Value != null && cell.Value.ToString().Contains(toolsWindow.LookupContent))
                        {
                            cell.Selected = true;
                            dgvPeople.CurrentCell = cell;
                            return;
                        }
                    }
                }
            }
            else
            {
                //字段查找不查找當前 因為是查找下一個
                if (row.Index == currentRowIndex)
                    continue;
                if (row.Cells[currentColumnIndex].Value != null && row.Cells[currentColumnIndex].Value.ToString().Contains(toolsWindow.LookupContent))
                {
                    row.Cells[currentColumnIndex].Selected = true;
                    dgvPeople.CurrentCell = row.Cells[currentColumnIndex];
                    return;
                }
            }
        }
    }

    foreach (DataGridViewRow row in dgvPeople.Rows)
    {
        //向上查找
        if (row.Index <= currentRowIndex)
        {
            if (toolsWindow.AllLookup)
            {
                //如果是當前選中行 只查找前面的列
                if (currentRowIndex == row.Index)
                {
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        if (cell.ColumnIndex < currentColumnIndex)
                        {
                            if (cell.Value != null && cell.Value.ToString().Contains(toolsWindow.LookupContent))
                            {
                                cell.Selected = true;
                                dgvPeople.CurrentCell = cell;
                                return;
                            }
                        }
                    }
                }
                else
                { //否則從第一列開始查找
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        if (cell.Value != null && cell.Value.ToString().Contains(toolsWindow.LookupContent))
                        {
                            cell.Selected = true;
                            dgvPeople.CurrentCell = cell;
                            return;
                        }
                    }
                }
            }
            else
            {
                //字段查找不查找當前 因為是查找下一個
                if (row.Index == currentRowIndex)
                    continue;
                if (row.Cells[currentColumnIndex].Value != null && row.Cells[currentColumnIndex].Value.ToString().Contains(toolsWindow.LookupContent))
                {
                    row.Cells[currentColumnIndex].Selected = true;
                    dgvPeople.CurrentCell = row.Cells[currentColumnIndex];
                    return;
                }
            }
        }
    }

    MessageBox.Show("未找到匹配項!");
}
  • 替換下一個

替換就比較簡單了,首先如果選中列就是查找的值則直接替換,然后再替換則按照查找的思路查找到下一個后替換就行了,代碼基本一樣就沒必要放垃圾代碼了。

  • 全部替換

全部替換就不用查找下一個要顯示查找過程那么麻煩了,直接遍歷所有單元格進行替換并選中供用戶查看就行了。

private void ToolsWindow_ReplaceAllHandler(object sender, EventArgs e)
{
    bool IsReplace = false;
    int currentColumnIndex = dgvPeople.CurrentCell.ColumnIndex;
           
    foreach (DataGridViewRow row in dgvPeople.Rows)
    {
        if (toolsWindow.AllLookup)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.ColumnIndex != 0 && cell.Value != null && cell.Value.ToString().Contains(toolsWindow.LookupContent))
                {
                    cell.Selected = true;
                    cell.Value = cell.Value.ToString().Replace(toolsWindow.LookupContent, toolsWindow.ReplaceContent);
                    IsReplace = true;
                }
            }
        }
        else
        {
            if (row.Cells[currentColumnIndex].Value != null && row.Cells[currentColumnIndex].Value.ToString().Contains(toolsWindow.LookupContent))
            {
                row.Cells[currentColumnIndex].Selected = true;
                row.Cells[currentColumnIndex].Value = row.Cells[currentColumnIndex].Value.ToString().Replace(toolsWindow.LookupContent, toolsWindow.ReplaceContent);
                IsReplace = true;
            }
        }
    }
    if (!IsReplace)
        MessageBox.Show("未找到匹配項!");
}

4、源文件

打包了這個兩個窗體代碼:DataGridViewExcel.zip

到此這篇關于WinForm使用DataGridView實現(xiàn)類似Excel表格的查找替換的文章就介紹到這了,更多相關DataGridView實現(xiàn)表格的查找替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#獲取系統(tǒng)當前日期和時間的示例詳解

    C#獲取系統(tǒng)當前日期和時間的示例詳解

    這篇文章主要為大家詳細介紹了C#如何使用DateTime的Now靜態(tài)屬性動態(tài)獲得系統(tǒng)當前日期和時間,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-01-01
  • 一文弄懂C#淺克隆與深克隆

    一文弄懂C#淺克隆與深克隆

    在C#中,淺克隆和深克隆是兩種常見的對象克隆技術,本文主要介紹了C#淺克隆與深克隆,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 關于C#.net winform程序驗證moss的集成身份認證實例

    關于C#.net winform程序驗證moss的集成身份認證實例

    因為網(wǎng)站使用的是windows集成認證,所以遇到了權限問題,需要輸入密碼。使操作和用戶體驗非常不方便,研究了好久沒有找到好的方法,最后終于讓我踏破鐵鞋總結出了下面的方法
    2013-03-03
  • C#適配器模式的使用

    C#適配器模式的使用

    本文主要介紹了C#適配器模式的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • c#字符串使用正則表達式示例

    c#字符串使用正則表達式示例

    這篇文章主要介紹了c#字符串使用正則表達式示例,需要的朋友可以參考下
    2014-02-02
  • C# 組件的使用方法示例詳解

    C# 組件的使用方法示例詳解

    這篇文章主要介紹了C# 組件的使用方法示例詳解,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • 基于C#實現(xiàn)文件偽裝技術

    基于C#實現(xiàn)文件偽裝技術

    這篇文章主要為大家詳細介紹了如何基于C#實現(xiàn)文件偽裝功能,將一般文件夾偽裝成計算機,控制面板,打印機等,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • C#實現(xiàn)一個簡單實用的TXT文本操作及日志框架詳解

    C#實現(xiàn)一個簡單實用的TXT文本操作及日志框架詳解

    這篇文章主要給大家介紹了關于利用C#如何實現(xiàn)一個簡單實用的TXT文本操作及日志框架的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們一起來看看吧
    2018-07-07
  • 基于WPF實現(xiàn)多選下拉控件的示例代碼

    基于WPF實現(xiàn)多選下拉控件的示例代碼

    這篇文章主要為大家詳細介紹了WPF實現(xiàn)簡單的多選下拉控件,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-02-02
  • WPF自定義控件的實現(xiàn)

    WPF自定義控件的實現(xiàn)

    本文主要介紹了WPF自定義控件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

河曲县| 崇仁县| 庆阳市| 普洱| 元氏县| 且末县| 平顺县| 洛宁县| 成安县| 贺兰县| 利津县| 三河市| 沁水县| 彰化市| 双城市| 准格尔旗| 静乐县| 区。| 阳城县| 芦山县| 当涂县| 宝鸡市| 古田县| 富锦市| 老河口市| 广汉市| 景泰县| 布拖县| 昌黎县| 德庆县| 双桥区| 平潭县| 栾川县| 射洪县| 九寨沟县| 云和县| 固始县| 汤原县| 南漳县| 天长市| 金平|