m0_59342845 2023-10-19 09:41 采纳率: 81%
浏览 5
已结题

winform窗体间传值显示问题

winform中我有两个窗体,我在a窗体中opcua通讯数据订阅,在b窗体中的datagridview中实时显示数据。现在的问题是a窗体中我可以把数据赋值给datagridview指定行列,但是在b窗体中无法显示数据。

img

img

        /// <summary>在a窗体中的数据订阅
        ///     Subscription_s the data changed.订阅数据更改
        /// </summary>
        /// <param name="subscription">The subscription.</param>
        /// <param name="e">
        ///     The <see cref="DataChangedEventArgs" /> instance containing the event data.
        /// </param>
       private void subscription_DataChanged(Subscription subscription, DataChangedEventArgs e)
       {
           if (InvokeRequired)
           {
               BeginInvoke(new DataChangedEventHandler(subscription_DataChanged), subscription, e);
               return;
           }
           Form3 form3 = new Form3();
           foreach (var dataChange in e.DataChanges)
           {
               if (dataChange.Value.StatusCode.IsBad()) continue;
               form3.dataGridView1.Rows.Add(18);
               form3.dataGridView1.Rows[Convert.ToInt32(dataChange.MonitoredItem.ClientHandle - 1)].Cells[1].Value = String.Format(dataChange.Value.ToString());//调试显示有数据传入,应该在b窗体(form3)datagridview中报警那一列显示数据,但不显示。
           }
       }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-19 20:23
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7628268
    • 这篇博客你也可以参考下:关于Winform中对DataGridView实现在输入数据时定位在某一行的心得总结
    • 您还可以看一下 武占文老师的C#WinForm工业企业销售管理系统开发课程中的 DataGridView数据统计类设计小节, 巩固相关知识点
    • 除此之外, 这篇博客: c# 从零创建winform窗体控件实现读取.dat文件数据、在dataGridView中显示数据、输出Excel文件中的 3 将显示在DataGirdView中的数据导出到Excel表格文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      添加Button控件。修改(Name)属性和Text属性。

       添加Click事件。

      在自动生成的Click事件是添加下面代码。

              private void saveButton_Click(object sender, EventArgs e) {
                  //保存按钮,弹出对话框选择保存路径和文件名
                  //验证是否有文件
                  //弹出对话框浏览保存路径和文件名称
                  string filePath = SearchBox1.Search_text.Text; //.dat文件地址
                  string fileNameData = Path.GetFileNameWithoutExtension(filePath); //.dat文件名
                  string fileName = fileNameData; //可以在这里设置默认文件名
                  string saveFileName = ""; //文件保存名
                  SaveFileDialog saveDialog = new SaveFileDialog(); //实例化文件对象
                  saveDialog.DefaultExt = "xlsx";//文件默认扩展名
                  saveDialog.Filter = "Excel文件|*.xlsx";//获取或设置当前文件名筛选器字符串,该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容。
                  saveDialog.FileName = fileName;
                  saveDialog.ShowDialog();//打开保存窗口给你选择路径和设置文件名
                  saveFileName = saveDialog.FileName;
                  if (saveFileName.IndexOf(":") < 0) return; //被点了取消
                  Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                  if (xlApp == null) {
                      MessageBox.Show("无法创建Excel对象,您的电脑可能未安装Excel");
                      return;
                  }
                  Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;//Workbooks代表一个 Microsoft Excel 工作簿
                  Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);//新建一个工作表。 新工作表将成为活动工作表。
                  Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
                                                                                                                                        //写入标题             
                  for (int i = 0; i < dataGridView1.ColumnCount; i++)//遍历循环获取DataGridView标题
                  { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; }// worksheet.Cells[1, i + 1]表示工作簿第一行第i+1列,Columns[i].HeaderText表示第i列的表头
                  //写入数值
                  for (int r = 0; r < dataGridView1.Rows.Count; r++)//这里表示数据的行标,dataGridView1.Rows.Count表示行数
                  {
                      for (int i = 0; i < dataGridView1.ColumnCount; i++)//遍历r行的列数
                      {
                          worksheet.Cells[r + 2, i + 1] = dataGridView1.Rows[r].Cells[i].Value;//Cells[r + 2, i + 1]表示工作簿从第二行开始第一行保存为表头了,dataGridView1.Rows[r].Cells[i].Value获取列的r行i值
                      }
                      System.Windows.Forms.Application.DoEvents();//实时更新表格
                  }
                  worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
                  MessageBox.Show(fileName + "资料保存成功", "提示", MessageBoxButtons.OK);//提示保存成功
                  if (saveFileName != "")//saveFileName保存文件名不为空
                  {
                      try {
                          workbook.Saved = true;//获取或设置一个值,该值指示工作簿自上次保存以来是否进行了更改
                          workbook.SaveCopyAs(saveFileName);  //fileSaved = true;将工作簿副本保存到文件中,但不修改内存中打开的工作簿                 
                      }
                      catch (Exception ex) {//fileSaved = false;                      
                          MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                      }
                  }
                  xlApp.Quit();
                  GC.Collect();//强行销毁
              }

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月1日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表