Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать DataBinding для поля в котором имеется значение DBNULL? / 25 сообщений из 25, страница 1 из 1
09.11.2004, 15:09
    #32773753
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Как сделать DataBinding для поля в котором имеется значение DBNULL?
...
Рейтинг: 0 / 0
09.11.2004, 15:19
    #32773790
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
создай объект Binding, подпишись на его события Format и Parse.
добавь его в коллекцию DataBindings Control'a
...
Рейтинг: 0 / 0
09.11.2004, 16:15
    #32773949
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Так не работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Binding bind=new Binding("Value",tarRow,"ID_pi");
cbpiN.DataBindings.Add(bind);
bind.Format +=new ConvertEventHandler(bind_Format);
bind.Parse  +=new ConvertEventHandler(bind_Parse);

private void bind_Parse(object sender, ConvertEventArgs e)
{
if(e.DesiredType == typeof(DBNull)) 
{
	e.Value = 0;
}
}

private void bind_Format(object sender, ConvertEventArgs e)
{
if(e.DesiredType == typeof(DBNull)) 
{
	e.Value = 0;
}
}
Как нужно?
...
Рейтинг: 0 / 0
09.11.2004, 16:41
    #32774018
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
...
Рейтинг: 0 / 0
09.11.2004, 16:47
    #32774039
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
должно быть для Parse что то в этом роде
Код: plaintext
1.
2.
3.
if(e.DesiredType == typeof(int))  // нужный тип для отображения, а не DBNull
{
  e.Value=(Convert.IsDBNull(e.Value)) ? 0 : e.Value;
}
...
Рейтинг: 0 / 0
09.11.2004, 18:17
    #32774282
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Не работает, на событие никогда не сробатывает!?
...
Рейтинг: 0 / 0
09.11.2004, 18:40
    #32774339
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
формат должен сработать. кстати, код привел выше, он именно на формат
(datasource --> control).
...
Рейтинг: 0 / 0
10.11.2004, 10:48
    #32774916
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Я делаю это для обычной редактируемой строки.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
AgentMan.dsMain.TariffRow tarRow;///!!!
...
...
...
Binding bind=new Binding("Value",tarRow,"ID_pi");
bind.Format +=new ConvertEventHandler(bind_Format);
bind.Parse  +=new ConvertEventHandler(bind_Parse);			
cbpiN.DataBindings.Add(bind);
...
...
...
private void bind_Parse(object sender, ConvertEventArgs e)
{
if(e.DesiredType == typeof(DBNull)) 
{
	e.Value=(Convert.IsDBNull(e.Value)) ? 0 : e.Value;
}
}

private void bind_Format(object sender, ConvertEventArgs e)
{
if(e.DesiredType == typeof(DBNull)) 
{
	e.Value = 0;				
}
}
Не срабатывает!?
...
Рейтинг: 0 / 0
10.11.2004, 11:00
    #32774952
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Вообще на событие не реагирует.
...
Рейтинг: 0 / 0
10.11.2004, 11:23
    #32775023
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
cbpiN - что это за контрол ?
...
Рейтинг: 0 / 0
10.11.2004, 11:36
    #32775065
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
???
запрос значения (самого первого) происходит внутри DataBindings.Add(bind); - в нем же вызывается и обработчик format.
...
Рейтинг: 0 / 0
10.11.2004, 11:43
    #32775080
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
На break point не входит, то есть не катит!
Можешь выслать пример простенькой програмки?
dagarkov@etalon.aval.ua
...
Рейтинг: 0 / 0
10.11.2004, 11:46
    #32775089
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Есть извращенный вариант, нашел в инете:
Код: plaintext
1.
2.
if (this.dRow["..."]==System.DBNull.Value) 
this.dRow["..."]=System.DBNull.Value.ToString(); 
...
Рейтинг: 0 / 0
10.11.2004, 12:12
    #32775169
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
на форме лежит один контрол dateTimePicker1 - DateTimePicker
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DataSet	ds=new DataSet();

public Form1()
{
  InitializeComponent();
			
  DataTable tbl=new DataTable("A");
  tbl.Columns.Add("DT", typeof(DateTime));
			
  DataRow rw=tbl.NewRow();
  rw["DT"]=DateTime.Now; // попробуй в таком виде и закоментарить эту строку
  tbl.Rows.Add(rw);
			
  Binding bind=new Binding("Value", tbl, "DT");
  bind.Format+=new ConvertEventHandler(bind_Format);
  this.dateTimePicker1.DataBindings.Add(bind);
}

private void bind_Format(object sender, ConvertEventArgs e)
{
  if(e.DesiredType!=typeof(DateTime)) return; // поставь здесь точку останова
  if(Convert.IsDBNull(e.Value)) e.Value=new DateTime(2001, 2,3);
}
...
Рейтинг: 0 / 0
10.11.2004, 12:59
    #32775316
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
if(e.DesiredType == typeof(DBNull)) вот объясни, что ты здесь проверяешь ???
у какого контрола есть св-во с таким типом ???
не говоря уже о колонках в DataTable - там ты сразу вылетишь на exception при попытке создать колонку с таким типом данных.
...
Рейтинг: 0 / 0
10.11.2004, 18:24
    #32776184
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Я брал пример из какого-то топика, а суть не в этом!- на событие вообще не реагировало...

В твоем примере на событие реагирует, только значение не меняется!?
...
Рейтинг: 0 / 0
10.11.2004, 18:38
    #32776209
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Dim GrishinВ твоем примере на событие реагирует, только значение не меняется!?блин, старая песня :)
вроде уже сколько об этом говорили...

добавь кнопку на форму и в обработчике клика кнопки
Код: plaintext
1.
2.
3.
DataTable tbl=(DataTable)this.dateTimePicker1.DataBindings["Value"].DataSource;
tbl.Rows[0].EndEdit(); // <---  ведь говорили об этом не один раз с тобой
object dt=tbl.Rows[0]["DT"]; // любуйся на новое значение :)
...
Рейтинг: 0 / 0
10.11.2004, 19:18
    #32776268
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Это прикол я понял, не работает! :)
...
Рейтинг: 0 / 0
10.11.2004, 19:23
    #32776273
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
что не работает ? конкретнее ...
...
Рейтинг: 0 / 0
10.11.2004, 19:28
    #32776280
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Заработало, а как в combobox убрать тек. запись, что бы она утсановилась на null?
...
Рейтинг: 0 / 0
10.11.2004, 19:38
    #32776298
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
если ComboBox привязан к колонке таблицы lookup справочника - никак.

есть обходной путь - добавить к таблице еще одну запись
чтобы под ValueMember попадал DBNull, а в DisplayMember текст типа "(null)" или "<не определено>"
...
Рейтинг: 0 / 0
10.11.2004, 19:43
    #32776302
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Короче у меня теперь другая проблема,

Это часть моей програмки, если что то не понятно могу уточнить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
private void btnEditTariff_Click(object sender, System.EventArgs e)
{
bool IsNewRow=(((Button)sender).Name!=btnEditTariff.Name);
try
{
AgentMan.dsMain.TariffRow editTariffRow;

if (IsNewRow)
{
editTariffRow=this.dsMain1.Tariff.NewTariffRow();
//////Значения по умолчанию
editTariffRow.tarDF=DateTime.Today;
editTariffRow.tarDT=DateTime.Today;				
}
else
{
editTariffRow=((AgentMan.dsMain.TariffRow)((DataRowView)this.grdTariff.BindingContext[this.grdTariff.DataSource, this.grdTariff.DataMember].Current).Row);								  
editTariffRow.BeginEdit();				
}
	
frmEditTariff frmET=new frmEditTariff();
frmET.DialogParam(this.dsMain1,editTariffRow);				

frmET.ShowDialog(this);
if (frmET.DialogResult==DialogResult.OK)	
{					
if (IsNewRow) 
{
  this.dsMain1.Tariff.AddTariffRow(editTariffRow);			
}

editTariffRow.EndEdit();						
this.grdTariff.BindingContext["Tariff"].EndCurrentEdit();
dml.UpdateTableData(dsMain1.Tariff,dml.sdaTariff);			
} 
else
editTariffRow.CancelEdit();
frmET.Dispose();
}
catch (System.Exception eEndEdit)
{
System.Windows.Forms.MessageBox.Show(eEndEdit.Message);
}

Что делает UpdateTableData
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public bool UpdateTableData(DataTable dtParam,System.Data.SqlClient.SqlDataAdapter sdaParam)
{
bool result=true;
try
{
sdaParam.Update(dtParam);
dtParam.AcceptChanges();
}
catch (System.Exception e)
{
dtParam.RejectChanges(); // <-- Тебе за это спасибо! :)
System.Windows.Forms.MessageBox.Show(e.Message,"Ошибка.");
result=false;
}
return result;
}

frmEditTariff - Форма редактирования записи
dml - как в Delphi модуль с dataadapter'aми

У меня в форме редактирования при получении параметров
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public void DialogParam(AgentMan.dsMain dsParam,AgentMan.dsMain.TariffRow tarRow)
{
this.ds1=dsParam;
this.CurrenttarRow=tarRow;
//AgentMan.dsMain.TariffDataTable tarRow=ds1.Tariff;


this.cbpiN.DataSource=dwProgIns;
this.cbzoneN.DataSource=ds1.Zones;

this.cbcurN.DataSource=ds1.Currency;
this.cbriskN.DataSource=ds1.Risk;
this.cbcurNInsure.DataSource=ds1.Currency;
this.cbtpN.DataSource=ds1.TypePeriod;
this.dwProgIns.Table=ds1.ProgIns;
this.cbtpN	.DataBindings.Add(new System.Windows.Forms.Binding("Value", tarRow, "ID_tp"));
this.cbriskN.DataBindings.Add(new System.Windows.Forms.Binding("Value", tarRow, "ID_risk"));
this.cbcurNInsure.DataBindings.Add(new System.Windows.Forms.Binding("Value", tarRow, "ID_curInsure"));
this.cbcurN	.DataBindings.Add(new System.Windows.Forms.Binding("Value", tarRow, "ID_cur"));


this.cbzoneN.DataBindings.Add(new System.Windows.Forms.Binding("Value",tarRow,"ID_zone"));
this.cbpiN	.DataBindings.Add(new System.Windows.Forms.Binding("Value",tarRow,"ID_pi"));
this.dptarDF.DataBindings.Add(new System.Windows.Forms.Binding("Value",tarRow,"tarDF"));
this.dptarDT.DataBindings.Add(new System.Windows.Forms.Binding("Value",tarRow,"tarDT"));
this.edtarSInsure.DataBindings.Add("Text",tarRow,"tarSInsure");
this.edtarSTariff.DataBindings.Add("Text",tarRow,"tarSTariff");

/// <NULLS>
this.chbID_piISNull.Checked=tarRow["ID_pi"]==System.DBNull.Value;
this.chbID_zoneISNull.Checked=tarRow["ID_zone"]==System.DBNull.Value ;
}

Так вот, после этого всего, когда я пытаюсь редактировать строку второй раз!
оно не сразу сохраняет, тут какая то ошибка с DataBinding'om, надеюсь не в ДНК :)
...
Рейтинг: 0 / 0
10.11.2004, 22:23
    #32776407
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
ты хоть представляешь, на сколько гекалитров это потянет (разобраться в "часть моей програмки" ) ?
...
Рейтинг: 0 / 0
11.11.2004, 10:43
    #32776870
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Согласен, много, если ты из Киева, можно устроить.
Мне просто показалось, что для профессионала здесь всё очевидно и понятно.
А тут всего-то чать кода редактирования строки в DataSet'e , тривиальная необходимость.
...
Рейтинг: 0 / 0
11.11.2004, 11:35
    #32777070
Dim Grishin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать DataBinding для поля в котором имеется значение DBNULL?
Так что никак?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать DataBinding для поля в котором имеется значение DBNULL? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]