使dataGridView1公开

时间:2014-05-28 18:51:16

标签: c# datagridview

我试图让我的dataGridView公开,所以我可以从另一个类访问它。我尝试这样做

public DataGridView dgv = new DataGridView();

为了测试这个更改,我尝试使用

在Form1上填充信息
dgv.DataSource = prevEx.ToList();

之前它会充满信息,但现在它根本没有填充,我就盯着空DGV。我知道prevEx有一个事实,因为在公开之前,DGV会被填充。

我知道我在应该填充字段的步骤之前初始化新的DGV(它在我的所有其他公共变量的顶部),所以这不是问题,所以现在我&# 39;我不知所措。任何帮助都会很棒。

为了澄清一些困惑,这里有更多的代码。

public partial class Form1 : Form
    {
    public static Microsoft.Office.Interop.Excel._Application excelApp = new Microsoft.Office.Interop.Excel.Application() { DisplayAlerts = false, Visible = false };
    System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();

    public List<Attorney> listOfAttys = Helpers.getAttorneys();
    public static DataGridView dgv = new DataGridView();

    public static string fileName = null;
    public static string chatterCase = null;
    public static string userName = null;
    public static string attorneyNum = null;
    public static int batchID;
    public static string ID;
    public static DateTime dateHold;
    public static string holdDesc = null;
    public static int startingRow;
    public static string holdAccount = null;

    public void btnLoad_Click(object sender, EventArgs e)
    {
        txtbxFilename.Text = null;
        txtbxChatterCase.Text = null;
        txtbxUserName.Text = null;
        txtbxRowNum.Text = null;

        System.IO.Stream myStream = null;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        openFileDialog1.InitialDirectory = "C:\\";
        openFileDialog1.Filter = "Excel files |*.xls;*.xlsx";
        openFileDialog1.FilterIndex = 2;
        openFileDialog1.RestoreDirectory = true;

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    fileName = txtbxFilename.Text = openFileDialog1.FileName;

                    myStream.Close();
                    myStream.Dispose();
                }
            }
            catch (Exception ex)
            {
                excelApp.Quit();
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }

        var prevEx = LegalTransactionList.previewExcel();
        dgv.DataSource = prevEx.ToList();

    }

2 个答案:

答案 0 :(得分:1)

也使用静态标签声明:

public static DataGridView dgv = new DataGridView();

这将使它在类之间(全局)保留数据。

在你的其他课堂上称之为:

MyClassName.dgv.DataSource = prevEx.ToList();

答案 1 :(得分:0)

使用静态标签制作:

  public static DataGridView dgv = new DataGridView();

假设此控件属于Class Foo,要访问它,另一个类只需使用

  Foo.dgv.DataSource = prevEx.ToList();

如果类Foo已在需要调用它的类中实例化,即

   Foo bar = new Foo();

然后你不需要静态标签,它将被访问:

bar.dgv.DataSource = prevEx.ToList();

但是我的推荐是建立一个公共静态列表,并将数据源设置在与dgv相同的类中,而不是将dgv设置为public和static。

最后一个建议是,首先尝试将dataSource设置为null。

  dgv.DataSource = null;
  dgv.DataSource = prevEx.ToList();