Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > DataTableMapping


Автор: t0mmy4824 24.5.2011, 19:50
Добрый вечер всем
Вычитал что переименовывать поля в DataSet можно с помощь DataTableMapping...
создал простую таблицу...два поля 
Код

private static void TableMappingCatalogs(SqlDataAdapter dataAdapter)
        {
            try
            {
                DataColumnMapping[] mappedColums ={
                                                      new DataColumnMapping ("id_catalog","Kod"),
                                                      new DataColumnMapping ("name","Model")
                                                  };
                DataTableMapping usersTableMapping = new DataTableMapping("Catalogs", "Catalogs", mappedColums);
                dataAdapter.TableMappings.Add(usersTableMapping);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

потом вывожу все в датагрид, там все нормально имена показывает "Kod","Model"...все работает
Код

using (SqlConnection connection = new SqlConnection(connectString))
            {
                SqlDataAdapter dataAdapter1 =
                new SqlDataAdapter(new SqlCommand(sql , connection));

                DataSet ds = new DataSet();
                ds.Tables.Add("Catalogs");
                TableMappingCatalogs(dataAdapter1);
                dataAdapter1.Fill(ds.Tables["Catalogs"]);
                // Assign the DataSet as the DataSource for the BindingSource.
                BindingSource bs = new BindingSource();
                bs.DataSource = ds.Tables["Catalogs"].DefaultView;
                bindingNavigator1.BindingSource = bs;
                dataGridView1.DataSource = bs;


делаю кнопку которая добавляет
хочу добавить запись в БД по нажатию кнопки
Код

private void button1_Click(object sender, EventArgs e)
        {
            string sql1 = AddRecords();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sql1,connectString);
            DataSet ds = new DataSet();
            dataAdapter.Fill(ds);
            dataAdapter = new SqlDataAdapter(sql, connectString);
            ds.Tables.Add(tabl);
            dataAdapter.Fill(ds.Tables[tabl]);
            BindingSource bs = new BindingSource();
            bs.DataSource = ds.Tables[tabl].DefaultView;
           
            dataGridView1.DataSource = bs;
            
        }

сама функция AddRecords() генерирует запрос ....
Код

string query = string.Format("INSERT INTO {0}(", this.Text);
                //запрос на добавление
                for (int i = 1; i <= dataGridView1.Columns.Count; i++)
                {
                    query += dataGridView1.Columns[i - 1].HeaderText.ToString() + ",";
                }

                query = query.Remove(query.Length - 1);

                query += ") VALUES (";

                for (int i = 1; i <= dataGridView1.Columns.Count; i++)
                {
                    query += "'" + panel1.Controls["textBox" + i].Text + "',";

                }

                query = query.Remove(query.Length - 1);
                query += ")";
                return query;


в итоге получаю ошибку: 
Additional information: Invalid column name 'Kod'.
Invalid column name 'Model'.


Помогите решить эту проблему...

Автор: jonie 24.5.2011, 22:02
ну очевидно что ошибка тут:
Код

5: .... dataGridView1.Columns[i - 1].HeaderText

вообще не надо брать грид для итерирования по колонкам - грид только отображает данные.
Берите из источника данных..

Автор: t0mmy4824 24.5.2011, 22:16
Цитата(jonie @ 24.5.2011,  22:02)
ну очевидно что ошибка тут:
Код

5: .... dataGridView1.Columns[i - 1].HeaderText

вообще не надо брать грид для итерирования по колонкам - грид только отображает данные.
Берите из источника данных..

я просто только учусь..подробней можете написать? буду признателен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)