瀏覽次數: 627316

  • 如何在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;