Введение в ADO.NET. Источник данных - XML-файл. Отображение данных связанной таблицы, страница 20

  static string[] courses = { "Mathematics", "Physics", "English", ".NET Framework" };

  DataRowChangeEventHandler rowChanged;

  DataGridView activeGrid, searchGrid;

DataTable activeTable;

  string searchColumnName, searchControl;

  Form formFound;

  string findWhat;

  public MainForm()

  {

    Thread.CurrentThread.CurrentCulture = new CultureInfo(1033);

    InitializeComponent();

    studsGrid.CellEnter += new DataGridViewCellEventHandler(grid_CellEnter);

    examsGrid.CellEnter += new DataGridViewCellEventHandler(grid_CellEnter);

    InitDataSet();

    fileName = "Studs.xml";

    bFindNext = bSearchChanged = false;

    foundCell = null;

    activeGrid = studsGrid;

    tAverageLow.TextChanged += new EventHandler(tAverage_TextChanged);

    tAverageHi.TextChanged += new EventHandler(tAverage_TextChanged);

  }

  void MainForm_Load(object sender, EventArgs e)

  {

    SetDesktopLocation(10, 10);

    comboFind_SelectedIndexChanged (comboFind, EventArgs.Empty);

    RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\MySoft\StudentsSet");

    fileName = null;

    if (key != null && (fileName = (string)key.GetValue("Last File")) != null)

      Open(fileName);

  }

  void AddStyleStud(DataGridView grid)

  {

     // Здесь ваш код

  }

  void AddStyleExam(DataGridView grid)

  {

    // Здесь ваш код

  }

  void InitDataSet()

  {

     // Здесь ваш код

  }

  void studs_RowChanged(object sender, DataRowChangeEventArgs e)

  {

    DataTable exams = ds.Tables[1];

    if (e.Action == DataRowAction.Add) // Если в первой таблице появилась новая строка

    {

      for (int j = 0; j < courses.Length; j++) // Создаем 4 записи во второй таблице

      {

        DataRow row = exams.NewRow();

        e.Row["Name"] = Trim(e.Row["Name"].ToString());

        row["StudID"] = e.Row["ID"];// Ключевые поля должны сопадать

        row["Course"] = courses[j]; // Массив с именами предметов должен существовать

        row["Credit"] = false;

        row["Date"] = DBNull.Value; // Значение DBNull соответствует незаполненным полям

        row["Mark"] = DBNull.Value;

        exams.Rows.Add(row);

      }

    }

  }

  void InitTables()

  {

    object[] studs = {

      new object[] {1, "Charlie Parker", "123-4455", "Broadway, 52a"},

      new object[] {2, "Alex Black", "555-1122", "5-th Avenue, 74" },

      new object[] {3, "Andy Williams", "430-5125", "Back st., 22" },

      new object[] {4, "Charley Mingus", "230-1466", "Hi st., 30" },

      new object[] {5, "Chet Baker", "320-8656", "Howard st., 15" },

      new object[] {6, "Lou Rowles", "552-4233", "Basin st., 10" },

    };

    foreach (object[] o in studs)

      ds.Tables[0].Rows.Add(o);

    object[] exams = {

        new object[] {1, 1, "Mathematics", true, new DateTime(2006,1,6), 5},

        new object[] {2, 1, "Physics", true, new DateTime(2006,1,10), 5},

        new object[] {3, 1, "English", true, new DateTime(2006,1,14), 5},

        new object[] {4, 1, ".NET Framework", true, new DateTime(2006,1,20), 5},

        new object[] {5, 2, "Mathematics", true, new DateTime(2006,1,6), 5},

        new object[] {6, 2, "Physics", true, new DateTime(2006,1,10), 5},

        new object[] {7, 2, "English", true, new DateTime(2006,1,14), 5},

        new object[] {8, 2, ".NET Framework", true, new DateTime(2006,1,18), 5},

        new object[] {9, 3, "Mathematics", true, new DateTime(2006,1,6), 5},

        new object[] {10, 3, "Physics", true, new DateTime(2006,1,10), 5},

        new object[] {11, 3, "English", true, new DateTime(2006,1,14), 5},