|
infonavigator1如果有查詢Leftjoin過來的欄位,會把它誤認為是原表的欄位而導致錯誤,應該如何解決? |
觀看回應
|
|
注意不要使用 select A.*,B.* from A leftjoin B on A.Id=B.Id 這樣的語法,如果要查詢join進來的欄位,必須在select語句有存在此欄位,否則無法判斷欄位屬於哪個table的, 如:select A.*,B.field1,B.field2 from A left join B on A.Id=B.ID 重點是要把要查詢的欄位一定要特別加上Table名稱, 順序也要調整(就是主檔要在前面,Join的欄位在後面,這也是要特別註意的),不然查詢就會有問題。
|
|
|
|
如何控制某個欄位在新增時可以輸入,修改時不可輸入? |
觀看回應
|
|
如果此欄位是Server端的InfoCommand定義的key欄位,則在InfoBindingSource中設定DisableKeyFields屬性為true即可。但如果此欄位不是定義的keyfields,或者keyFields有多個,只有這個欄位元需要做此處理,則在Navigator的BeforeItemClick事件直接用程式處理比較好,如下: 在navigator的BefeoreItemClick事件中添加如下程式: if (e.ItemName == "Edit") { infoTextBox1.Enabled = false; } else if (e.ItemName == "Add") { infoTextBox1.Enabled = true; }
|
|
|
|
為何在SetWhere過濾資料後,InfoNavigator按鈕的狀態不對? |
觀看回應
|
|
這是因為Navigator的button狀態改變需要時機,可以在Setwhere前後各增加一行程式,如下的範例: InfoNavigator.SetState("Querying"); InfoDataSet.SetWhere(“你的Where條件”); InfoNavigator.SetState("Browsed");
|
|
|
|
在InfoNavigator的QueryForm裡,如何動態控制某個RefVal內的WhereItem內容?(使用ClientQeury的模式) |
觀看回應
|
|
需要先取得查詢屬性的Clientquery,由於是用Infonavigator實現的,所以要先用反射來取得Navigator中的ClientQuery,再取得這個Query form中的panel,然後按照命名規則就能取得你所要的查詢欄位之對應元件。然後再對這些元件進行whereItem設置。各個查詢元件的命名規則是txt加上流水編號,即txt0是第一個查詢欄位的元件。. 如: ClientQuery cq = (ClientQuery)this.infoNavigator1.GetType().GetField("cqform", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this.infoNavigator1); // 取出 infoNavigator內的ClientQuery對象 Panel pn = cq.ActivePanel; InfoRefvalBox box = pn.Controls["txt0"] as InfoRefvalBox; … // 取出InfoRefValBox後,即可控制該元件的屬性了。
|
|
|
|
在InfoNavigator新增一個按鈕來處理ClientQuery的自定查詢後,InfoNavigator上的按鈕狀態會異常? |
觀看回應
|
|
在Navigator內現有的按鈕,我們都有精密處理過,並不是一個簡單的只有貼入button與設定Click事件而已,有兩種方法可以避免由此引起問題: 1. 使用我們的Query按鈕來執行你貼的Clientquery,雖然按鈕並沒有變Disible,但因違e.Cancel=true,所以後面不會執行系統內定的Query動作,改成你自己寫的程式,程式寫在Navigator的BeforeItemClick事件,如下: if (e.ItemName == "Query") { ClientQuery1.Execute(); //接到自己的ClientQuery e.Cancel = true; // 取消後面的內定Query動作 } 2. 這種方法更簡單,直接設定Navigator的QueryMode?ClientQuery,不要用自己的ClientQuery,將查詢欄位設定在Navigator的QueryField中即可。
|
|
|