从另一个类访问类的相同DataGridView实例

时间:2017-09-21 09:10:39

标签: c# datagridview

我是C#的初学者。我有一个DataGridvew" dgPins"在类中定义,以及名为" pnlPins"的Panel。该应用程序是使用几个UI组合在一起设计的。初始化在X类中完成,如下所示

private void InitializeComponent() {
    ...
    private System.Windows.Forms.Panel pnlPINs;
    private System.Windows.Forms.DataGridView dgPins;
    ...
}

我使用此网格显示从连接到以太网的设备读取的一些引脚。填充数据后,它看起来像这样(这是通过单击按钮完成的),

private void mnuGeraetLesen_Click(object sender, EventArgs e)
{
    ...
    if (EthernetAvailable == true)
    {
         QueryAllCodeCommandHandler();// local function which fills the grid
    }
}

enter image description here

现在在另一个UI(类)中,我有一个需要访问同一网格的按钮 实例并执行相同的任务。所以我在那个课上做了以下(让我们说Y级)。

private void _btnSearchDevices_Click(object sender, EventArgs e)
{
    SingleDeviceInformationControl test = new SingleDeviceInformationControl();
    test.QueryAllCodeCommandHandler();
}

但据我所知,这会创建一个不同的实例,但不起作用。因此,网格保持为空,如下所示。

enter image description here

我想过将dataGridview重命名为public static,这使我能够从任何地方访问同一个实例,但这会使整个项目不稳定。 我做了一些研究,发现了类似的问题,但我们并不了解为实现预期结果我必须做些什么。我非常感谢有关此问题的可能解决方案的任何提示。非常感谢你!

1 个答案:

答案 0 :(得分:0)

如果您要以其他形式实例化YourForm,则必须让Grid Public访问它或将私有Grid封装在“public”属性中。

如果您正在谈论单独的UI或UserContorls您可以创建UI的静态实例,这样您就必须将Grid从私有修改为公共。但它建议您将私有网格封装在“公共”属性

var chart = new Chart(ctx, {
   type: 'line',
   data: {
      labels: ['Jan\n2017', 'Feb\n2017', 'Mar\n2017', 'Apr\n2017', 'May\n2017'],
      datasets: [{
         label: 'LINE',
         data: [3, 1, 4, 2, 5],
         backgroundColor: 'rgba(0, 119, 290, 0.2)',
         borderColor: 'rgba(0, 119, 290, 0.6)',
         fill: false
      }]
   },
   options: {
      scales: {
         xAxes: [{
            ticks: {
               callback: function(tick) {
                  return tick.split(/\n/);
               }
            }
         }],
         yAxes: [{
            ticks: {
               beginAtZero: true,
               stepSize: 1
            }
         }]
      },
      tooltips: {
         callbacks: {
            title: function(t, d) {
               return d.labels[t[0].index].replace(/\n/, ' ');
            }
         }
      }
   }
});

YourForm是包含您的网格的表单,然后您可以像这样访问您的网格

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script> <canvas id="ctx"></canvas>

这种方法通常用于UserControls