2014-11-26 2 views
0

У меня есть форма Windows в VS2013 C#. У меня есть это в классе Form1:Почему мой набор данных недоступен в событии нажатия кнопки C#

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     // ... 
     DataTable dt1 = new DataTable("Legend"); 
     DataSet dSet = new DataSet("Graph"); 
     DataRow dRow; 
     dSet.Tables.Add("Legend"); 
     dt1.Columns.Add("Name"); 
     dt1.Columns.Add("Unit"); 
     dt1.Columns.Add("Val"); 
     dataGridView1.DataSource = dt1; 
    } 

Эта часть работает отлично, таблица на форме заполняется с заголовками столбцов. Тогда я хочу, чтобы добавить строки в таблицу в случае нажатия кнопки:

private void btnAddSeries_Click(object sender, EventArgs e) 
{ 
    DataRow newEntry = dt1.NewRow(); 
    newEntry["Name"] = "Pressure"; 
    newEntry["Unit"] = "bar"; 
    newEntry["Val"] = 12; 
    dt1.Rows.Add(newEntry); 
} 

Что я не хватаю, я получаю ошибку «Имя„dt1“не существует в текущем контексте»

Цените любую помощь

+0

Поскольку вы создали 'dt1' внутри своего конструктора форм, он будет доступен только там. Вы должны определить его на уровне класса, чтобы получить доступ к нему несколькими способами. – Habib

+0

Этот класс должен быть статичным? Я хочу всегда использовать одну и ту же таблицу для других событий. –

+0

'Franl Meier' посмотреть это в свободное время [Модификаторы доступа C#] (http://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx) – MethodMan

ответ

2

В соответствии с Habib, когда вы объявляете его в конструкторе Form1, он становится локальной переменной. Вы должны определить его в верхней части класса Form1 (вне конструктора), так что это глобальная переменная.

+0

поверх «public Form1()» - это только «открытый частичный класс Form1: Form», а поверх него - «пространство имен MyProgramName». Если я помещу это где-нибудь поверх Form1, он вообще не работает. Спасибо, в любом случае. –

0

Нашел с помощью одноэлементных рисунка, хотя я не уверен, действительно ли это синглтон:

Добавление этого класса:

public sealed class ChartDataTable 
{ 
    static readonly DataTable dt1 = new DataTable(); 

    public static DataTable Gdt1 
    { 
     get{ 
      return dt1; 
      } 
    } 

} 

Это прекрасно работает, я могу делать все, Я хочу к своей таблице, например:

ChartDataTable.Gdt1.Rows.Add(items here); 

Он автоматически обновляется в формате datagridview на форме.

Смежные вопросы