InfoRefVal取得的值為何會跑掉?
InfoRefVal如果ValueMember的欄位內容有重複的資料時,就只會傳回第一筆的資料,這種情況一頒發生在InfoRefVal的Table中,有兩個KeyFields,如果ValueMember是第一個KeyFields,當然會有重複的資料,因此必須使用第二個KeyFields並且配合WhereItem來指定第一個KeyFields的範圍值。也就是說,如果InfoRefval的Table資料有兩個KeyFields時,因為ValueMember只能這設定一個,所以就無法一次取得兩個KeyFields的內容。
如何從GridView取值至RefVal之WhereItem Value
在Refval的whereitem裏的value寫一個函數,例如:cust_id()
public string cust_id()
{
String custid = ((DataGridViewRow) infoDataGridView1. CurrentRow). Cells ["custidDataGridViewTextBoxColumn"].Value.ToString();
return custid;
}
這個例子是把GridView當前這筆資料的cust_id的傳回給InfoRefVal的whereitem。
InfoRefVal開窗選資料時,為何看到資料會有跳號的現象,資料不完全?
這是因為InfoRefVal在一般的情況下,其PacketRecords都是為100,當資料量大時,系統會只有抓取100筆下來,但因為目前畫面上所顯示的部分資料(已經瀏覽過的資料)會被一一Cache到臨時的DataSet中,所以User打開InfoRefVal時會發現只有前100筆再加上已被瀏覽的資料而已,必須往下翻頁資料才會逐漸完整,如果你希望資料一定要完整的話,可以設定InfoRefVal的PacketRecords為-1即可,但如果資料很大時,將會影響資料的下載速度。
InfoRefVal的DisplayMember有什麼辦法可以顯示兩個欄位?
可以變通一下,比如,Refval的sql語句可以將要顯示的內容合并到一起,這樣就可以在一個欄位顯示多重信息。比如:select No, Name+ Descriptions as CustDesc......
Detail有兩個RefVal欄位,如:產品類別與產品編號,選類別需過濾出相對的編號,請問如何處理?
可以在Detail的產品編號的Refval中定義WhereItem屬性,來過濾相對的類別,如在產品編號的WhereItem的值,使用自定義函數MyValue()的方式,在MyValue方法中寫程式:
return (ibsMaster.Current as DataRowView)[ItemType].ToString(); // 返回 ItemType的內容
infoRefVal設定的SelectAlias,為何在RunTime時無效?
infoRefVal的SelectAlias僅為設計時所使用,執行時是沒有效果的,要實現跨資料庫的infoRefVal,請使用InfoCommand上面的EEPAlias,配合InfoBindingSource來處理infoRefVal。
如何實現在GridView中的InfoRefval選完後,自動跳往其他單元格?
請參考以下的實例:
private void rvProducts_OnReturn(object sender, OnReturnEventArgs e)
{
string state = infoNavigator1.GetCurrentState();
if (state == "Editing" || state == "Inserting") // 在編輯或新增時才處理
{
rvProducts.DoColumnMatch(e.ReturnRow[0].ToString()); // 處理ColumnMatch的動作
grdOrderDetails.CurrentCell = grdOrderDetails["dgcOrderDetailsQuantity", grdOrderDetails.CurrentRow.Index]; // 指定跳到同Row的某個Column
}
}
infoRefval 如果Table的資料很大, 速度很慢, 如何改善?
如果infoRefVal的數據量很大時,如上萬筆數據,請務必配合PackedRecords的設定,如設定為100,代表只會取100筆數據於Client端中,當對應的資料不在PacketRecord的範圍時,系統會自行獨立個別取值,好強化效能。(注意,如果是SP3之前的版本,沒有PacketRecord的屬性,只能配合使用InfoDataSet+InfoBindingSource的方式,因為只有InfoDataSet可以設定PacketRecord屬性。