2016-12-14 4 views
-1

Я использую SQL для заполнения моего datagridview. Я так делаю:Как добавить столбец при использовании SqlDataAdapter для заполнения datagridview

string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; 
SqlConnection myConnection = new SqlConnection(cn); 

string sql = "some text here"; 
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, myConnection); 
DataSet ds = new DataSet(); 
myConnection.Open(); 
dataadapter.Fill(ds, "Authors_table"); 
myConnection.Close(); 
dataGridView1.DataSource = ds; 
dataGridView1.DataMember = "Authors_table"; 

Теперь он удаляет старое datagridview и вставляет выделение. Но я хочу просто добавить данные в столбец справа от существующих данных.

Заранее спасибо

+0

Ваш вопрос о том, как заставить DataGridView отражать данные, имеющиеся в «DataSet», или как заставить DataSet иметь нужные данные? –

+0

Это _sounds_, как если бы вы хотите заполнить DataTable в DataSet, а затем добавить дополнительные данные в дополнительный столбец в DataTable, сопоставляя идентификаторы записей, чтобы каждая строка получала соответствующее значение данных в вашем новом столбце. Это верно? –

+0

@AnnL. Это действительно правильно sir –

ответ

0

Это требование звучит, как это может быть выполнено с помощью SQL Inner Join в запросе, который вы используете в вашем SqlDataAdapter. Если бы вы смогли объединить два источника данных вместе с соответствующими ключами, вы могли бы просто вытащить данные один раз. Но я собираюсь предположить, что есть причина, почему это не сработает для вас.

Вы можете на самом деле делать то, что вы хотите с DataSet, но вам нужно принять несколько шагов:

string sql = "The first query" 
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, myConnection); 
DataSet ds = new DataSet(); 
myConnection.Open(); 
dataadapter.Fill(ds, "Authors_table"); 
myConnection.Close(); 

// I don't know what your primary key is, but you need to have one. 
// I am assuming it's called "author_id". 

DataColumn authorIdColumn = ds.Tables["Authors_table"].Columns["author_id"]; 
ds.Tables["Authors_table"].PrimaryKey = new[] { authorIdColumn }; 

// Get your second set of data 
sql = "My second query, which also has the same primary key, but has more columns" 
dataadapter = new SqlDataAdapter(sql, myConnection); 
dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
DataSet ds2 = ds.Clone(); 

myConnection.Open(); 
dataadapter.Fill(ds2, "Authors_table"); 
myConnection.Close(); 

// Now we use the DataSet.Merge method, which is very powerful. 
ds.Merge(ds2, false, MissingSchemaAction.AddWithKey); 

dataGridView1.DataSource = ds; 
dataGridView1.DataMember = "Authors_table"; 

Вы можете поэкспериментировать с этим много: это только наброски , Не зная ваши данные и то, что вы делаете до этого момента, трудно узнать, какие настройки или методы вам также необходимо вызвать.

0

Попробуйте это. Я побежал несколько запросов в один присест

SqlDataAdapter adapter = new SqlDataAdapter(
    "SELECT * FROM Customers; SELECT * FROM Orders", connection); 
adapter.TableMappings.Add("Table", "Customer"); 
adapter.TableMappings.Add("Table1", "Order"); 

adapter.Fill(ds); 
Смежные вопросы