Здравствуйте, я прочитал несколько статей, но не получил ответ на свой вопрос. Я хочу сделать двойной процесс. 1. Заполните представление данных из запроса, а не таблицы напрямую, кнопкой, которая выполняет запрос для заполнения. 2. Измените значения в сетке данных, чтобы передать BACK базе данных, чтобы внести изменения. Проблема, с которой я сталкиваюсь, это пример, который я нахожу, предполагая, что у вас есть СТАТИЧЕСКАЯ вселенная, а НЕ та, которая может измениться. Я уже знал часть населения, но мне любопытно, как вы используете сетку данных для установления соединения с базой данных и говорите: «Делайте то, что я показываю в данный момент в качестве изменений, и сохраняйте их в той базе данных, из которой они изначально были».
Код, который я следовал немного:
http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-database Они использовали метод Access, а я использую SQL, но это не должно иметь большого значения.
EG: я могу установить элемент dataAdapter в одном экземпляре процесса, но другой экземпляр НЕ знает об этом. Я предполагаю, что что-то может быть сделано, поскольку вы можете сделать это довольно легко с помощью перетаскивания с наборами данных Возможно, я тоже ошибаюсь, и некоторые элементы должны быть статическими, а некоторые динамическими. Все, что я действительно хочу, это доказать, что я могу изменить значения в VALUE на что-то другое и передать это обратно в базу данных с источником привязки. Однако источник привязки неизвестен в другом случае, и статическая настройка некоторых вещей провалилась так, как я их определил. Любая помощь очень ценится, спасибо!
НАСТРОЙКА:
Создание тестовой базы данных с одной таблицей, определенной как:
Создать таблицу Test (ID int Identity, VALUE varchar (2))
вставить в тестовые значения («A»), («B»), («C»)
Создание приложения Windows Form в Visual Studio 2010 (должно работать в 2008 или более ранней версии, поскольку я не верю, что я что-то делаю явно .NET 4.0). Форма Windows должна иметь две кнопки: «btnPopulate» б. 'BtnUpdate'; текстовое поле: 'txtquery', заполненное текстом: 'select * from Test'; и сетка данных: «сетка».
Фактический код, используемый за формой:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace DataGridTestDBUpdater
{
public partial class TestDataGrid : Form
{
public string con = "Integrated Security=SSPI;Persist Security Info=False;Data Source =(local);Initial Catalog=Test";
public TestDataGrid()
{
InitializeComponent();
}
private void btnPopulate_Click(object sender, EventArgs e)
{
string query = txtquery.Text;
using (SqlConnection cn = new SqlConnection(con))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
using (DataTable table = new DataTable())
{
cn.Open();
using (BindingSource bs = new BindingSource())
{
adapter.SelectCommand = cmd;
adapter.Fill(table);
bs.DataSource = table;
gridview.DataSource = bs.DataSource;
}
cn.Close();
}
}
}
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
using (BindingSource bs = new BindingSource())
{
bs.DataSource = gridview.DataSource;
using (DataTable table = new DataTable())
{
using(SqlDataAdapter adpt = new SqlDataAdapter())
{
bs.DataSource = gridview.DataSource;
/// ALL OF MY WORK IS FAILING FROM HERE ON ///
/// WANT TO GET UPDATE TO WORK HERE: ///
///
///adpt.Update(bs.DataSource);
}
}
}
}
}
}