[ADO.NET] Работа со связанными таблицами через один DataGridView

agaaaa

Есть две таблицы (DataTable). Одна содержит пары ID-NAME, другая инфу, связанную с ID.
Требуется в DataGridView отображать с возможностью редактирования вторую (столбец ID не нужно уметь редактировать где вместо ID выводить NAME из первой

Alena_08_11

а сделать одну таблицу, тем же иннер джоином на стдии получения несудьба?

agaaaa

как её потом вернуть в базу, если она получена через DataAdapter?

Alena_08_11

Ну попробуй как нить так:
2 таблы:
fucks(id, name); fucksinfo(fuck_id, fuck_info);

SqlCommand sel = new SqlCommand("select fucks.id as fuck_id, fucks.name as fuck_name, fucksinfo.fuck_info
from fucks inner join fucksinfo on fucks.id = fucksinfo.fuck_id",cn);

SqlCommand upd = new SqlCommand("update fucksinfo set fuck_info = @fi where fuck_id = @id; select fucks.id as fuck_id, fucks.name as fuck_name, fucksinfo.fuck_info from fucks inner join fucksinfo on fucks.id = fucksinfo.fuck_id",cn); // не уверен что нада после upd писать текст select комманды - но мастер вроде так делает.
upd.Parameters.Add(new SqlParameter( "@fi", System.Data.SqlDbType.VarChar, 128, "fuck_info";
upd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, System.Byte0 System.Byte0 "fuck_id", System.Data.DataRowVersion.Original, null;

SqlCommand del = new SqlCommand("delete from fucksinfo where fuck_id = @id",cn);
del.Parameters.Add(new SqlParameter"@id", SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, System.Byte0 System.Byte0 "fuck_id", System.Data.DataRowVersion.Original, null;

SqlDataAdapter da = new SqlDataAdapter;
da.SelectCommand = sel;
da.UpdateCommand = upd;
da.DeleteCommand = del;

По идее этот адаптер должен обслуживать изменение и удаление записей в таблице fucksinfo (поменял, поудалял через DataGridView, сделал da.Update(dt) - и всё зашибись типа. dt это DataSource у GridView). Чтобы можно было ещё добавлять элементы - ната изьебнуться и написать InsertCommand которая сразу в 2 таблицы будет добавлять. Это я с ходу не могу придумать, а проверить - нету возможности.
ps. Сам я особо не шарю в этом, когда то что то пробовал писать - так что за правильность и за грамотность кода не ручаюсь.

agaaaa

какой, кстати, мастер?
и зачем нужно inner join? вместе с конструкцией on ...?
такой код возвращает одну таблицу:
select NAMETABLE.NAME, INFOTABLE.ID, INFOTABLE.INFO from NAMETABLE, INFOTABLE
where INFOTABLE.ID = NAMETABLE.ID

Alena_08_11

Ну если делать адаптер с помощью встроенного мастера деланья адаптеров - то он вроде в конце insert и update команд заодно дописывает текст select команды
но разбираться в генерируемом коде геморно - слишком много, на мой взгляд параметров добавляет. Да и InsertCommand генерирует немного неправильно - в ней лучше select SCOPE_IDENTITY as id юзать, чем @@itity, имхо. Так что лучше самому адаптер делать.
ps. Так было в VS2003, как с этим в VS2005 - хз

agaaaa

а эти селект команды не обновляют ли локальную таблицу после инсерта?

Alena_08_11

code:select NAMETABLE.NAME, INFOTABLE.ID, INFOTABLE.INFO from NAMETABLE, INFOTABLE
where INFOTABLE.ID = NAMETABLE.ID
Ну значит пофигу
я в sql не силён

Alena_08_11

а эти селект команды не обновляют ли локальную таблицу после инсерта?
Ну по идее да, только вот хз нужно ли это. По идее ты же сначала инсертишь в локальную таблицу ...
хотя в общем я и в этом не силён

agaaaa

ап! где в 2к5-ой студии достать этот мастер?

evgen5555

Читай документацию, тупик.

agaaaa

это ты к чему?
Оставить комментарий
Имя или ник:
Комментарий: