如何在WinForm中對BindingSource進行過濾,並將符合條件的的記錄進行刪除?
可以用下列的程式來過濾與刪除資料,如下:
OEnergyDetail.MoveFirst();
int ibsOEDcount = ibsOEnergyDetail.Count;
int i = 0;
while (i< ibsOEDcount)
{
DataRowView dr = (DataRowView)ibsOEnergyDetail.Current;
if (dr["housecode"].ToString() == "D") // 將HouseCode為’D’的刪除
{
ibsOEnergyDetail.RemoveCurrent();
}
else
{
ibsOEnergyDetail.MoveNext();
}
i++;
}
ibsOEnergyDetail.EndEdit();
InfoBindingSource如何取值? 如何Insert與Delete ?
InfoBindingSource如何取值的方法:
ibsDetail.MoveFirst();
while (ibsDetail.Position+1<= ibsDetail.Count)
{
DataRowView dr = (DataRowView)ibsDetail.Current;
MessageBox.Show(dr.Row["ProductID"].ToString()); // 取ProductID
int oldPos = ibsDetail.Position;
ibsDetail.MoveNext();
if (ibsDetail.Position == oldPos) break;
}
InfoBindingSource Insert的方法:
ibsDetail.AddNew();
DataRowView dr = (DataRowView)ibsDetail.Current;
dr.Row["ProductID"] = 12;
dr.Row["Quantity"] = 10;
dr.Row["UnitPrice"] = 10;
dr.Row["Discount"] = 1;
ibsDetail.EndEdit();
ibsMaster.BeginEdit();
InfoBindingSource delete的方法:
ibsDetail.RemoveCurrent();
在Client如何取得一個欄位變更前後的值?
InfoBindingSource中有2個方法:GetOldValue("FieldName"),GetCurrentValue("FieldName")用於取舊值和新值。
為何點選infoNavigator的"新增"後再點選"放棄",會觸發infoBindingSource的AfterDelete事件?
新增時系統會增加一筆Row;放棄則將原來增加的內容刪除。因而會引發AfterDelete事件, 如果是想在刪除存檔後做其他操作,那可以在navigator的AfterItemClick事件寫程式,不要寫在bindingsource的Afterdelete裏面。
請問infoBindingSource.CurrentChanged跟infoBindingSource.PositionChanged有什麼不一樣呢?
BindingSource.CurrentChanged 事件發生於目前聯結(Binding)的項目變更時,每當 Current 屬性因為下列任何一個理由而變更時,將會引發 CurrentChanged 事件,如下:
1. List 的目前位置有變更。
2. DataSource 或 DataMember 屬性有變更。
3. 基礎 List 的成員資料內容有變。
4. 新的排序或篩選作業會重新整理此基礎清單.。
BindingSource.PositionChanged 事件發生於資料(Record) Position 的值已變更後。
為何一開表單就會執行InfoDataSet的AfterApplyUpdates事件,在開Form以及新增都會執行?
AfterApplyUpdates在開Form和新增的時候會觸發,這是由於在開Form的時候Init BindingSource引起,同時在新增是會在BindingSource中添加一個row引起。
winform, 如何得知目前 infoBindingSource 是否在新增狀態?
實際上infoBindingSource是沒有狀態的,您可以判斷當前筆是否為新增資料,如:
bool flag = (ibsMaster.Current as DataRowView).IsNew;
為何設定Detail的AutoApply的功能,不會自動存檔?
Detail是不能AutoApply的,只有在Master才能自動AutoApply,而且EEP在Master/Detail中Detail也只能透過Master才能存檔,除非你使用個別獨立的Master/Detail架構,也就是說,Master與Detail都是獨立的InfoCommand,在InfoBindingSource中自行處理關聯,這樣就可以做到AutoApply的功能;另一種輸入一筆Detail就存一次的辦法,可以在Detail的BindingSource的PositionChanged事件中添加Master.ApplyUpdates(); 而Master為對應主檔的InfoDataSet。
Master/Detail的WinForm,如何在Client端取得Detail的筆數?
如果是要取得當前畢master有多少對應的Detail筆數,可直接從ibsDetail.List.Count取得。
為何遇到Number或int資料型態欄位,在User將資料清空後,卻發生無法移開該欄位?
這是 .net本身的機制,如果是數值內容,是不能清空的,如果真的也清空,.您可以用程式直接寫入到bindingSource裏,如下:
(bindingSource.Current as DataRowView).Row["ColumnName"] = DBNull.Value;