在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点相关的知识,希望对你有一定的参考价值。

数据源在程序目录下basedata.xls中关键代码如下
Public xlApp As Excel.Application
Public xlBook As Excel.Workbook
Public xlsheet As Excel.Worksheet
Public lsFileName As String

Option Explicit
Dim bNUm As Integer
Dim cNUm As Integer
Dim S As String
Dim M As String
Dim strInput As String

Private Sub Form_Load()
Set xlApp = CreateObject("excel.Application")
lsFileName = App.Path & "\basedata.xls"
xlApp.Visible = False
Set xlBook = xlApp.Workbooks.Open(lsFileName)
Set xlsheet = xlBook.Worksheets(1)
End Sub
Private Sub Text1_Change()
Dim i%, j%
bNUm = Len(Text1.Text)
ListView1.ListItems.Clear
strInput = Left(Text1.Text, bNUm)
For i = 2 To 500
S = xlApp.Range("B" & i).Value
M = xlApp.Range("A" & i).Value
cNUm = Len(S)
For j = 1 To cNUm - bNUm
If Mid(S, j, bNUm) = strInput Then
ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S
End If
Next
Next
End Sub
excel内容:

运行结果:
错位了~

参考技术A 将以下两句
ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S

尝试并参考以下两句改改试试吧:
dim Hang as long '声明一个变量存储总行数
Hang=ListView1.ListItems.Count '获取当前总行数
ListView1.ListItems.Item(Hang+1).SubItems(1)=M
ListView1.ListItems.Item(Hang+1).SubItems(2)=S
参考技术B ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S

两个都是ADD肯定要错位啊,第二个ADD改为修改文本内容撒,太久不用VB,方法搞忘了
参考技术C ListView1.ListItems.Add().SubItems(1) = S
改成
ListView1.ListItems(ListView1.ListItems.count).SubItems(1) = S本回答被提问者采纳

winform中如何在多线程中更新UI控件--ListView实时显示执行信息

1、在winform中,所有对UI的操作,都得回到UI线程(主线程)上来,才不会报错

      线程间操作无效: 从不是创建控件的线程访问它。

2、在winform中,允许通过Control.invoke对控件进行操作。如下代码:

private void btnTest_Click(object sender, EventArgs e)
        {           
            CheckA();           
        }        

 
        private void CheckA()
        {
            System.Threading.ThreadPool.QueueUserWorkItem(t => {
                ShowInfo("检测开始.....");
                System.Threading.Thread.Sleep(3000);
                ShowInfo("暂停3秒结束.....");
                System.Threading.Thread.Sleep(2000);
                ShowInfo("暂停2秒结束.....");
                System.Threading.Thread.Sleep(1000);
                ShowInfo("检测结束");
            });
                       
        }
        private void ShowInfo(string Info)
        {
            listView1.Invoke(new Action(() =>
            {
                listView1.Columns[0].Width = listView1.ClientSize.Width;
                listView1.Items.Insert(0, new ListViewItem(Info));
            }));            
        }  

  

 

以上是关于在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点的主要内容,如果未能解决你的问题,请参考以下文章

listview导出Excel,该如何做?

C#ListView控件OleDb方法读取EXCEL

sql中如何更新符合条件的值

winform中如何在多线程中更新UI控件--ListView实时显示执行信息

excel 将所有符合条件的数据显示在另一表中

elementui主题如何实现实时修改实时看到效果