讯光科技
WinForm
  • InfoDataSet
  • InfoBindingSource
  • InfoDataGridView
  • InfoNavigator
  • InfoPictureBox
  • InfoRefVal
  • InfoRefBox
  • InfoComboBox
  • InfoTextBox
  • InfoTreeView
  • InfoSecurity
  • InfoForm
  • ClientQuery
  • InfoClientMove
  • InfoDateTimePicker
  • InfoHyperLink
  • Win發佈
  • WinForm其他問題

InfoDataSet

當前位置:首頁>常見問答>WinForm


打開Client的表單,系統出現'System. ComponentModel.Design. ExceptionCollection'的例外錯誤時,該怎麼處理? 一般是InfoDataSet無法啟動的原因,因此你可以打開此Client表單的Designer.cs(在該WinForm Project之下),通過尋找”InfoDataSet”功能找主檔DataSet的名稱,再找該DataSet.Active屬性(如idOrders.Active),找到後將Active設為False,然後存檔重新打開,如果還是無效,可以讓相對的Server Module重新Build一下,Client端也重新Build一下,退開VS重新進來應該就可以打開,如果是因為更新EEP2006版本所發生的問題,就須將整個Solution執行一次ReBuild,並執行一次InitEEP後,重新打開即可。
InfoDataSet重新Active,總是不能抓取InfoCommand所新增的欄位? 可以用以下的步驟來檢查: 1. VS2005中,Development Server關掉(右下工作列中找一下,如果有的話) 2. 執行VS2005/TOOLS/UnloadAppDomains,因為在VS2005中該DLL有可被Active了,所以會Build不過或是被佔用,所以會Active到舊的,經過以上,重Build Server的dll,重新讓InfoDataSet.Active=False,再True,就可以了。
如何根據Client的條件值,動態設定InfoCommand 的 where 條件值? 可在Client端,使用InfoDataSet.SetWhere(String WhereString);
自行寫SetWhere,能否用類似@p1的參數方式先設定,然後再傳值進去? 可以使用SetWhere的另一個方法:SetWhere(String strWhere, ArrayList param) 例如: SqlParameter parameter = new SqlParameter("Value", "abcde"); ArrayList list = new ArrayList(); list.Add(parameter); // 可以設定多組 infoDataSet1.SetWhere("Order=@Value", list);
如何實現Excel檔案轉入GridView? InfoDataSet與WebDataSource都有提供ReadFromXls方法,可以從Excel的格式文件中讀資料。ReadFromXls的方法有4個參數,ReadFromXls(string TableName,string FileName,int StartColumn,int StartRow),分別代表:table的名字(或者Index次序),xls的文件,起始行(平行橫),起始列(垂直列)等。
在InfoDataSet中,因為有PacketRecord設定,如何判斷資料移動到最後一筆? 可以使用這樣的方法實現抓下一批PacketRecord資料: bool flag = true; while(flag) { flag = infodataset.GetNextPacket(); } 如果已經到最後一筆,GetNextPacket會返回false。
如何將DataSet的內容寫入xml檔案中? 可通過如下方法實現:InfoDataSet1.RealDataSet.WriteXml(@"C:\\dataset.xml");
使用InfoDataSet.ReadFromXls時,出現“System.NullReferenceException: DataTable is null…….”的錯誤? 要使用ReadFromXls首先要確保InfoDataSet內的DataTable必須存在,如果DataTable不存在,可以通過InfoDataSet.RealDataSet.Tables.Add("CommandTable")來先新增一個DataTable來實現。
如果資料是放在標準的DataSet中,如何透過infoDataSet轉出Excel? 請參考下列範例: DataTable dt = dataset1.Tables[0].Clone(); dt.Merge(dataset1.Tables[0]); Srvtools.InfoDataSet a = new Srvtools.InfoDataSet(); a.RemoteName = "GLModule.cmdColDEF"; a.RealDataSet.Tables.Add(dt); a.ToExcel(0, @"c:\a.xls"); 其中:a.RemoteName = "GLModule.cmdColDEF"; 這是借用的一個DataModule名稱,不是代表後端取資料的真正DataModule,因為InfoDataSet是一定要設定RemoteName的,只好借用GLModule.cmdColDEF 來使用。
如何將Toexcel產生的xls的欄位抬頭改為中文? 請注意下列事項: 1) 目前要輸出的table,請設定他的D.D.(資料字典,放在系統Table: COLDEF中) 2) 如果有Left join到其他的Table欄位者,可以將left Join欄位用AS命名,在原Table的D.D.中,可以定義此虛擬欄位來顯示該欄位的抬頭。 3) 如果是View視圖Table的話,可以在D.D.的COLDEF表中增加一個以你的view的名稱的TableName,並將各欄位一一設定上即可。

InfoBindingSource

當前位置:首頁>常見問答>WinForm


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

InfoDataGridView

當前位置:首頁>常見問答>WinForm


如何設定DataGridView的header的text顏色? 如果DataGridView的ColumnType為InfoDataGridViewTextBox類型時,可以設定其HeadCellStyle屬性,但是,Header標題的顏色只有在windows經典風格下才會有效,如果不是經典的模式,建議改用粗體或者加*來提示。
如何在GridView中實現,當條件為=A欄位的值,取B欄位的值加總? 此例為,如果Type="001"則加總QTY.請依照自己情況作相應修改.建議用InfoBindingsource處理比較好.可在Navigator的BeforeItemClick事件中進行。 int i = ibsDetail.List.Count; int qty = 0; string sType = ""; for (int j = 0; j < i; j++) { sType = ((DataRowView)ibsDetail.List[j])["TYPE"].ToString(); if (sType == "001") qty = qty + Convert.ToInt16(((DataRowView)ibsDetail.List[j])["QTY"]); }
infoDataGridView 的TotalChanged如果有多個Total 要處理,如何知道是第幾個的值? TotalChanged的事件中,DataGridViewTotalChangedEventArgs e,利用e.ColumnName可以作為你判斷當前total的是哪個欄位,可以加以處理。
如何設計將InfoDataGridView的Detail 某個欄位Total,回寫到Master的某個元件上? 有兩種方法: 1. 使用GridView上的計算Total的功能ExpressionColumn,配合GridView的Total方式可以對該欄位元進行加總。同時為了配合Total方式的加總,GridView提供了TotalChanged事件,由此可以取得加總值。 if (e.ColumnName == "Amount" && (infoNavigator1.GetCurrentState() == "Inserting" || infoNavigator1.GetCurrentState() == "Editing")) { (ibsMaster.Current as DataRowView).Row.BeginEdit(); (ibsMaster.Current as DataRowView).Row["TotalAmt"] = Convert.ToDecimal(e.TotalValue); (ibsMaster.Current as DataRowView).Row.EndEdit(); //此方法的作用是為了當Master沒有修改的狀態下可以將這行Row的狀態變為Modifed } 2. 可以在InfoDataGridView的CellValueChanged中寫程式,同時加一下條件判斷: if (infonavigator.GetCurrentState() == "Inserting" || infonavigator.GetCurrentState() == "Editing" ) { if (e.ColumnIndex == yourIndex) textbox1.Text = infoDataGridVeiw.DoSum(colIndex, totalMode).ToString();//colIndex為列的索引,totalMode為匯總的類型 }
如何在infodatagridview中,將有運算式欄位來排序? 參考方法如: 先將該運算式欄位的SortMode設為Programmatic,在InfoDataGridView的CellClick事件中設計,假設運算式欄位為EMPTextBoxColumn: private void infoDataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex == this.infoDataGridView1.Columns.IndexOf(EMPTextBoxColumn)) { if (infoDataGridView1.SortedColumn == EMPTextBoxColumn && infoDataGridView1.SortOrder == SortOrder.Ascending) { this.ibsMaster.Sort = "EMP desc"; // ibsMaster為對應的InfoBindingSource } else { this.ibsMaster.Sort = "EMP asc"; } } }
GridView產生的Total欄位怎麼讓它靠右對齊呢? 在Columns中設定該欄位的ItemStyle.HorizontalAlign設定微Right。
DataGridView中如何取出被選取資料內容值;如何撰寫全部選取? 1.infoDataGridView.SelectedRows就是當前選中的所有的Row。 用infoDataGridView. SelectedRows[index].Cells[index].Value來取目前資料的內容值。 2. infoDataGridView.SelectAll();這個是全部選中。
如何設定DataGridView的header的text顏色? 如果DataGridView的ColumnType為InfoDataGridViewTextBox類型時,可以設定其HeadCellStyle屬性,但是,Header標題的顏色只有在windows經典風格下才會有效,如果不是經典的模式,建議改用粗體或者加*來提示。
Detail不是主鍵的欄位,如何做到可以新增卻不能更改? 可以在Detail的GridView設定CellBeginEdit事件,如下: private void infoDataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { if (e.RowIndex != infoDataGridView1.NewRowIndex) //更改而不是新增 { if (e.ColumnIndex == 不希望修改的欄位在的列號) { e.Cancel = true;//拒絕修改 } } }
為何在DataGridView中要刪除一筆資料,按 Delete鍵時,卻只是刪除第一個 Column的字元? 如果設定EditMode為EditOnEnter,那麼在選中的時候,常常會自動進入某個Cell的編輯狀態,這時候,鍵盤的操作對象是當前的Cell,而非GridView,所以這時候是無法刪除整筆記錄的。可以讓User點選到DataGridView的Header然後再按Delete鍵即可刪除。
infoDataGridView 的Total值, 有時為何顯示就不完整? 這部分需要調整一下DataGridView的Rows高度,在設計模式中,請調整DataGridView讓最後一Row能完全看到(或是多出幾個點), 即可解決此問題。
如何在某一個DataGridViewTextBoxColumn,輸入40,轉變為0040? 寫在DataGridView的CellValueChanged事件中,如下: if (infoNavigator1.CurrentState == "Editing" ||infoNavigator1.CurrentState == "Inserting") { if (e.ColumnIndex== 需要修改的欄位的列數) { if (InfoDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString().Length < 4) InfoDataGridView[e.ColumnIndex, e.RowIndex].Value = "00" + InfoDataGridView [e.ColumnIndex, e.RowIndex].Value.ToString(); } } 前面的判斷是為了只在編輯或者新增資料的時候才這樣處理,其他如瀏覽等狀態不必處理。
用程式新增Detail資料,為何新增資料不會立刻顯示出來? 可在Detail新增程式的最後加一句:GridView.Refresh(); 或者你可以改成直接對GridView的cell設定值,這樣就可以即時顯示,又不用額外處理。
當InfoDataGridView中使用infoRefVal編輯時,怎麼透過對InfoDataGridView的取得infoRefVal的DisplayMember的值,而不是實際的ValueMember的值? grdDetail[ColumnIndex, RowIndex].FormattedValue是取得DisplayMember的內容; grdDetail[ColumnIndex, RowIndex].Value是取得ValueMember的內容。
如何在打開Form1的時候定位infoDataGridView的某一筆指定資料? 可以在Form_Load的事件中,以下列程式來處理: DataRow[] drs = infoDataSet1.RealDataSet.Tables[0].Select("CustomerID=yourID"); // 取得DataRow int index = infoDataSet1.RealDataSet.Tables[0].Rows.IndexOf(drs[0]);//取得符合條件的第一筆 infoBindingSource1.Position = index;
有一個infoDataGridView,想要把重複的資料整列用特殊顏色標記出來? private void infoDataGridView2_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.ColumnIndex == 0)//當資料欄位Index { if (infoDataGridView2[0, e.RowIndex].Value != null)//當欲比對之資料不為空時才判斷 { DataSet ds = idTemp.Execute("select autono, …from …..”); int i =ds.Tables[0].Rows.Count;//算出總筆數 int j = 0; while (j <= i) { string NameRedColor = ds.Tables[0].Rows[j]["autono"].ToString();//取得相同資料 if (infoDataGridView2[23, e.RowIndex].Value.ToString() == NameRedColor)//如果資料相同則改變當前欄位處的顏色 { Gridview.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink; } j = j + 1; } } } }
為何在InfoDataGridView中,把Key Field設定為Visible=false,離開後又恢復為true? 這是VS本身的限制,請不要把InfoDataGridView的KeyField這個欄位放在第一個,而且又設為Visible=False。
InfoDataGridView 的RefValColumn是否可以用熱鍵打開查詢窗體? GridviewRefvalColumn有一個內定的熱鍵(快捷鍵)來打開窗體,即使用(ctrl+enter)即可,這樣也可以不用每個refvalColumn都寫程式控制了。
如何透過下SQL語法將資料內容動態顯示在DataGridView中? 只要設定DataGridView的DataSource設定為DataSet,DataMember設定為DataTable的名字就可以了.如: DataSet ds = CliUtils.ExcuteSql(“Select ..你的sql語句..”); DataGridView1.DataSource = ds; DataGridView1.DataMember = ds.Tables[0].TableName;
如何控制在infoGridView中的一個Cell做更改後,按向下鍵(Down),則讓遊標移到下一個Row的這個欄位,不要跑到第一個column去?(AutoApply設為True) 可以在InfoDataSet的BeforeApplyUpdates事件中記下位置,然後在AfterApplyUpdates事件中還原,如下: Point cellPoint = Point.Empty; // 設定一個Local變數 private void infoDataSet1_BeforeApplyUpdates(object sender, EventArgs e) { if (this.infoDataGridView1.SelectedCells.Count == 1) { DataGridViewCell cell = this.infoDataGridView1.SelectedCells[0]; cellPoint = new Point(cell.ColumnIndex, cell.RowIndex); // 紀錄 } } private void infoDataSet1_AfterApplyUpdates(object sender, EventArgs e) { if (cellPoint != Point.Empty && this.infoDataGridView1.SelectedCells.Count == 1) { this.infoDataGridView1.SelectedCells[0].Selected = false; this.infoDataGridView1[cellPoint.X, cellPoint.Y].Selected = true; // 還原 cellPoint = Point.Empty; } }

InfoNavigator

當前位置:首頁>常見問答>WinForm


在Navigator按下更改時,要預設的欄位值,也寫在哪個Event? 為了集中在Navigator中管理,須配合將InfoBindingSource.AutoDisibleControl=True,這樣User才不會任意直接去TextBox中來編輯資料,錯過了Navigator按下Edit的時機,因此就可以將這個功能做在Navigator的AfterItemClick事件中,把更改後的預設值寫進InfoBindingSource,如下: if (e.ItemName == "Edit") { infoTextBox1.Text= “測試”; }
在InfoNavigator中,如果需求符合某一條件時才能刪除,應如何處理? 有2個方法,說明如下: 1. 用navigator的刪除來控制,可以在BeforeItemClick中寫如下程式: if (e.ItemName == "Delete") { if (not 你的條件) { Messagebox.Show(“無法刪除!”); e.Cancel = true; } } 2. 在Master或View的(如果有view的話,可以用view)BindingSource的PositionChanged事件以及InfoNavigator的StateChanged事件去判斷,如下: if (not 你的條件) { bindingNavigatorDeleteItem1.enable=false; } else { bindingNavigatorDeleteItem1.enable=true; }
Master/Detail中,如何控制沒有輸入明細檔時,提示「請輸入明細檔」並且不會存檔? 可以在Navigator的BeforeItemclick事件來控制,如下: if (e.ItemName == "Apply") { if (ibsDetail.List.Count == 0) e.Cancel = true;//不存檔; }
使用View+Mater/Detail的操作介面時,若是在新增/更改狀態時, 如何控制User不要去點選到View的DataGridView上,否則輸入的資料會被迫取消? 可通過Navigator的ViewScrollProtect屬性設為True即可,此可控制在編輯資料時,View的DataGridView無法被點選或操作。
bindingNavigatorCountItem 可以顯示實際Query的總筆數嗎,而不是PacketRecords筆數? 可以,只要將InfoNavigator的GetRealRecordsCount屬性設為True。
如何用程式觸發infoNavigator上的EditItem按下事件(Click),不是由User來按下該Button? 可通過infoNavigator1.EditItem.PerformClick();完成。
infoNavigator的BeforeItemClick跟AfterItemClick這兩個事件與Navigator內各Button內的事件的執行先後次序為何? 用途而在? Navigator的事件順序: 1. BeforeItemClick;當您點擊Navigator上的button時最先執行這裏的程式,如果您在事件中設定e.Cancel等於true,就會導致Button本身的功能失效。可以用來控制條件式的執行某些Button,比如符合某條件才能新增,刪除,存檔,編輯等。 2. Navigator內Button本身的Click事件,這個事件是執行Navigator上每個button的功能,比如Apply按鈕的ApplyUpdates,Query按鈕的查詢,Add按鈕的新增。這部分功能是否執行,要看BeforeItemClick的e.Cancel是否為true,如果為true就不執行,如果為false就執行,而Button自己的Click事件不是由開發者可以自行控制的,是由EEP的元件本身所控制,除非去改寫或繼承此元件。 AfterItemClick事件;這個事件觸發時,每個button的功能都已經完成或者取消(因為e.Cancel=true),是最後一個事件。一般可以做一些收尾的工作,比如refresh一下讓Server端更改的資料同步顯示,或者已經存檔成功了,要做其他的操作等等。
infoNavigator各Button上顯示為何是英文,不是中文? 可以設定CliUtils.fClientLang = SYS_LANGUAGE.TRA,在開啟form之前,比如EEPNetClient的主畫面開啟的時候設置。並檢查一下InfoNavigator的GetServerText屬性是否設定為True。
如何控制InfoNavigator中自行增加的Button的Enable狀態? 如果是要Navigator的按鈕按下後來自行設定Button的狀態者,可以寫在navigator的AfterItemClick事件中,比如: if (e.ItemName = "Confirm" && InfoTextBox1.Text == "..") // 配合每個的欄位內容值 button1.Enabled = true;
按下「刪除」鈕後,已詢問Y/N了,為何還要再按下存檔鈕呢?可否按下Y即刪儲存檔呢? InfoBindingSource有AutoApply屬性,如果為True時,刪除時按OK鍵後都會自動存檔,所以這個確認框是為了配合AutoApply為True的情況。
如何實現正在編輯某資料時,Navigator不能移到View中其他筆資料中? 請將Navigator的ViewScrollProtext屬性設為true即可。
單檔GridView中編輯多筆資料時,為何修改兩筆CheckBox後存檔,只會存第一個入資料庫? 只有單檔多筆編輯且直接點擊Apply的時候會?生這個問題(如果點擊OK再存檔就不會),解決辦法可以在navigator的BeforeItemClick寫如下程式: if (e.ItemName == "Apply") { grdView.EndEdit(); }
10. Q: 為何在表單打開後,infoNavigator的修改功能就不能使用,如何解決? 這是因為Navigator進入的某一個狀態下所造成的現象,為了保證打開表單將Navigator設定為流覽模式,可以在Form_load事件中加上以下程式: infoNavigator1.SetState("Browsed");
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中即可。
在DesignTime無法使用infoNavigator1的屬性states,點擊後會出現"並未將物件參考設定為物件的執行個體? 請將原有的infonavigator刪除並重新貼一個infonavigator。

InfoPictureBox

當前位置:首頁>常見問答>WinForm


Windows表單中有使用到infoPictureBox1來處理Image的欄位,為何在資料移動且沒有更改資料時,會發生每移一筆就會Apply一次,造成速度很慢? 可以在InfoPicture的DataBinds的Advanced內容中將屬性Bind的『Data Source Update Mode』改?『Never』,這樣就不會在上下筆移動的時候寫值。

InfoRefVal

當前位置:首頁>常見問答>WinForm


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屬性。

InfoRefBox

當前位置:首頁>常見問答>WinForm


InfoRefValBox,當挑選完資料後,如果沒有移開到別的物件,則還是會空白? InfoRefvalBox在焦點離開時才會顯示display的內容,當焦點在元件內時是顯示Valuemember的內容,這是規則。除了移動焦點沒有其他方法,如果是查詢,可以使用一個Button的按鈕來讓他離開焦點,如果你在資料編輯中,也可以在Refval的OnClose或者Return事件中,用程式將焦點移動到其他的Object上,來解決此問題。
InfoRefvalBox可以不顯示按鈕嗎? 1)如果所有的InfoRefvalBox都不想顯示按鈕,可以直接更改這個元件的原始程式,將該button的visible設為false即可。 2)另外,也可以變通一下,比如在Enter事件將visible設為true,leave又設為false。

InfoComboBox

當前位置:首頁>常見問答>WinForm


如何可以使InfoCombobox只能選取而不能自行Key值 只要將InfoComboBox.ComboBoxStyle 屬性設成 DropDownList即不能讓User可以KeyIn資料。
如何把InfoComboBox選擇的值清除或回復成尚未點選的狀態? 只能用程式將ComboBox的SelectedIndex設?-1, 代表清除,另外,EEP SP3版本後,能接受按下"Del"鍵,代表清除(-1)的功能。
如何可以使InfoCombobox只能選取而不能自行Key值? ComboBoxStyle 屬性設成 DropDownList 就可以了。

InfoTextBox

當前位置:首頁>常見問答>WinForm


win form上可否有Memo多列的輸入元件嗎? InfoTextBox也可以多行輸入,只要MuiltiLine屬性設為true,將此TextBox.EnterEnable設為False,這樣按enter才不會跳到下一個欄位去。
使用InfoTextBox.WriteValue 和對InfoTextBox.text設值有何區別? WriteValue相當於兩個動作,給bind的屬性設值(比如Text),然後寫入到DataSet中。如果直接給元件Text設值,則不會寫回DataSet中,它需要有個動作,比如焦點離開這個Textbox,才會將值寫入到DataSet中。所以,如果您的焦點沒有從這個元件離開就可能沒有時機寫入到DataSet,很可能導致Text的內容沒有存檔,因此如果有發現沒有寫值到資料庫的情況,必須在適當的時機來使用InfoTextBox.WriteValue()的動作。
InfoTextBox有沒有辦法定位成999.999的格式? 可以用以下的方法: 1)自InfoTextBox的DataBinds屬性下,點擊(Advanced),會點開一個“Formatting and Advanced Binding”,裏面可以設定Text的格式。 2)動態設定的話,可以自己用程式更改一下它的Format定義.比如: infoTextBox3.DataBindings["Text"].FormatString = "N3",這是3位小數。
有三個TextBox,其中一個欄位的值等於另兩個欄位的值的相乘。請問這要在什麼事件? 可以寫在寫在這兩個欄位(被乘數)的TextChanged,或者leave事件中即可,去改變結果欄位的Text屬性。
InfoTextBox如何使用多列輸入的欄位? InfoTextBox也可以多列輸入,只要將MuiltiLine屬性設為true即可。別忘了將此TextBox.EnterEnable設為False,才不會發生Enter鑑會離開該欄位。
在infoTextBox裏設置了MaxLength屬性,但為何對中文字的內容無效? 這個是.net UniCode的特性,欄位是否為UniCode其長度的計算會有不同的結果,如它在計算string長度的時候是依據不同的code(如big5、gb32、utf8),統計的結果是不一樣的。所以,當你是UTF8等UniCode的資料,其string的長度是中文字一個字被計算為1碼,不是之前認知的2碼。
為何winForm 之 textbox 不能剪貼? Enabled=false是不能複製的。 ReadOnly=true是可以選擇並複製,但不可以剪貼就,因為不能更改資料,所以只能複製。

InfoTreeView

當前位置:首頁>常見問答>WinForm


InfoTreeView如何取得User在RunTime時所選的目前KEY值? 可以從OnAfterSelect事件中以 infotreeview.SelectedNode.Name屬性來取則目前的Key值。

InfoSecurity

當前位置:首頁>常見問答>WinForm


為何InfoNavigator上新增/修改/刪除等Button,無法匯入infoSecurity 作權限設定? 在InfoNavigator上的新增/更改/刪除的權限,不是用InfoNavigator來控制的,在EEP的架構上,於InfoSecurity元件中,是以InfoBindingSource來設定新增/更改/刪除/印表等的權限是否有其權限,系統會自動控管InfoBindingSource內的AllowInsert、AllowUpdate、AllowDelete、AllowPrint等屬性。
為何InfoSercurity的元件在開發機器上正常,但上傳至正式的Server上變無效? InfoSecurity的設定內容是存放在系統資料表中的,所以需要將開發環境內的系統Table的資料也同步到主機用的資料庫中,如要同步的系統Table有: GROUPMENUCONTROL(以群組來設定),USERMENUCONTROL (以使用者來設定), MENUTABLECONTROL(畫面中哪些元件需要設定權限)。
使用InfoSecurity時,萬一遇到同一群組中,針對某個用戶擁有特別權限時,該如何設置權限? 在InfoSecurity設定時,如果遇到同一個群組中,有一個User較為特別,其設定與群組中其他人不太一樣,因為設定了該群組又設定了該User,這樣會造成系統的系統混淆,因此,在InfoSecurity中只要設定Priority為User,代表User優先即可。

InfoForm

當前位置:首頁>常見問答>WinForm


自行打開的視窗,如何控制是否為MDI ? 可以利用CliUtils中的OpenPackageForm()來事實現,說明如下: CliUtils.OpenPackageForm(string Package, string Form, string Parameters, bool DialogBox, Form MdiParent) Package代表Dll的名稱,Form代表表單名稱,Parameters代表傳入參數,DialogBox代表是否要打開一個DialogBox,MdiParent代表是否打開一個Mdi的子視窗,如果為Null代表非MDI視窗,如果有MdiParent代表其為MDI的子視窗。

ClientQuery

當前位置:首頁>常見問答>WinForm


ClientQuery中,如何以程式來給預設值? 可以在clientquery.Execute() 前設定查詢欄位的DefaultValue, 如: (QueryColumns)(clientQuery1.Columns[3]).DefaultValue=DateTime.Today.ToShortDateString(); clientQuery1.Execute();
如何在ClientQuery的ComboBox中動態塞入ITEM值? ClientQuery的Combobox的資料來源是通過Refval,您可以對Refval的資料來源進行操作,比如Refval您改成關聯到DataSet+InfoBindingSource,這樣可以直接對Dataset或者bindingsource進行資料操作。
查詢欄位類型為ClientQueryRefValColumn時,如何取得查詢內容? ClientQuery的查詢控制項的命名規則是txt加上ClientQuery中的Column的Incex,所以txt0就表示是第一個查詢的控制項,以此類推,如: String s=(this.splitContainer1.Panel1.Controls["txt0"] as InfoRefvalBox).TextBoxSelectedValue;
如何設定ClientQuery欄位間以ENTER跳至下個查詢欄位? 在ClientQuery中,預設都是以Tab鍵來跳到下一個查詢欄位的,如果一定要使用Enter鍵,則可以在ClientQuery.Show(Panel1)下面增加如下程式: foreach (Control ct in panel1.Controls) { if (ct is TextBox) { ct.KeyDown += delegate(object ksender, KeyEventArgs ke) { if (ke.KeyCode == Keys.Enter) { if (!ke.Control && !ke.Alt) { SendKeys.Send("{Tab}"); ke.SuppressKeyPress = true; } } } } }

InfoClientMove

當前位置:首頁>常見問答>WinForm


InfoClientMove如何使用? InfoClientMove元件的用法是在Client端中批次對兩個InfoBindingSource的批量處理,也可以用在Master/Detail中,對Detail進行批量新增資料。例如在訂單系統中,可以選擇一張報價單號,然後可以利用InfoClientMove將該報價的明細資料全部新增到這筆訂單來,這樣可以免去User重復輸入。 這樣的操作不會跟後端資料庫產生關系,只是在Client端批次新增資料而已。 設定時SrcBindingSource是指來源的InfoBindingSource,DesBindingSource則是指要Copy的目的InfoBindingSource,一般在執行Excute前,可以依據條件過濾資料,只要對來源SrcBindingSource的InfoDataSet做SetWhere() 即可。

InfoDateTimePicker

當前位置:首頁>常見問答>WinForm


DataTimePicker如何可以存入資料欄位時,包含時間的資訊? 請注意下列事項: 1. 請確定InfoDateTimePicker是Bind到Value屬性而不是Text。 2. 將CustomFormat設為需要的格式,比如:yyyy/MM/dd hh:mm:ss。

InfoHyperLink

當前位置:首頁>常見問答>WinForm


為何在表單上設計InfoHyperLink,所設定的欄位傳入InfoTranslate的功能無法過濾出所要的資料? 請注意,InfoHyperLink是配合Gridview的HyperlinkColumn使用的打開另外表單,但是如果單個放在Form上使用系統無法判斷你要過濾的條件,因此不可用單個InfoHyperLink放在Form上。

Win發佈

當前位置:首頁>常見問答>WinForm


在Windows form中,有使用自己引用的其他dll,為何發布程式後無法引用此dll而發生錯誤? 如果有自行加入其他dll的引用,在發布的時候需要特別處理,有兩個方法皆可,如下: 1. EEPNetClient.exe在發布設定中,也將此dll包含進去,這樣Client端在安裝時才會有此dll。 2. 自行在使用此Form的Load中,加一行程式用于自動下載: CliUtils.DownLoadModule("Yourdll.dll",true);
該如何在同一台電腦發行兩個EEPNetClient? 使用EEPWinloader方式,這種方式可以多個版本共存,可以參考:http://www.infolight.com.tw/download/file/EEPWinLoader(big5).doc。
發佈後,Client端卻不會自動更新並且出現錯誤? Client的dll,不是用發佈來更新的,而是將更新檔放置在EEPNetServer所在機器的EEPNetClient路徑下。
Window Form開發端可以正常調用自己寫的類,為何客戶端卻出現“未能加載檔或程式集….”的錯誤信息? 請檢查代碼中是否引用了自己寫的.dll檔,如果是,需要將這個dll檔一起發佈出去,然後在EEPNetClient中添加這個引用,並在Publish選項中勾選為Include。
報表做參考,發佈後客戶端報錯: 無法載入檔案或組件 'R_MWO3WO, Version=…….’? CliUtils.DownLoadModule("R_MWO3WO.dll",true); 這行放在Form_Load事件中,這樣可以確保在使用前此dll已經存在,不需要寫多次,寫一次就可以了。
EEPNetClient發佈後,某個Client會出現錯誤信息?例如:找不到方法:'Void Srtools.InfoRefVal.set_FLookup Value(System.String)? 檢視有問題Client端機器的Assembly是否有infoRemoteModule和Srvtools.如果有,將其移除。
在EEPNetClient路徑下,自行建立的文件,該如何Publish到Client端? 選中該Project,在Solution Exploer的最上方有個Show All Fiels的按鈕,點擊一下會將該工程下所有的資料夾都顯示出來,右鍵選中要添加的資料夾,選擇Include In Project。
發佈後是否每登入一次都要執行Setup.exe? 第一次才需要點Setup.exe,安裝好以後會在“開始”菜單生成一個菜單項,以後只要從這裏就可以運行或者自動下載。
Client端安裝發佈時出現錯誤:類型Button未定義? 發佈時點開Application Files……這個按鍵按下去,將下圖的5個項目,都要選include。
為何在沒有EEP 和VS 的機子安裝Client端會出現:無法安裝或執行此應用程式。您需要先於全域組件快取(GAC)中安裝組件Srvtools版本2.2.0.0,才能使用此應用程式。 請參考http://www.dbtools.com/download/file/EEP2006(6)基礎設計(下).doc,最後一節”使用Publish Wizard分發版本”,特別註意按照說明,將相應的dll設定成“Include”。

WinForm其他問題

當前位置:首頁>常見問答>WinForm


Win Form保存資料時,如何透過updatecomponent的AfterApply事件截取存檔的錯誤訊息? 這種情況下是無法回傳信息到Client的,除非是系統出錯了,發生停止存檔才會回應訊息,如果是為了捕捉Server端所發生的錯誤,則可以通過throw new Exception的方式傳資訊回到Client,在Client的InfoDataSet有ApplyError事件可取得e.Exception.InnerException.Message就是Server的錯誤訊息。
如何在DefaultValidate中自訂動態的Validate訊息? DefaultValidate只要在自定義方法中增加一行程式就可以了,比如: public bool MyCheck(object val) { if(不符合條件) { (defaultValidate1.FieldItems[index] as FieldItem).WarningMsg = "Your Message"; // index是指第幾個欄位 return false; } else return true; }
如何設置某筆資料不可修改(如己確認的資料)? 1. ibsMaster設定AutoDisableControl 2. Navigator的BeforeItemClick事件: if(e.ItemName=="Edit") { if((ibsMaster.Current as DataRowView).Row["AB001"].ToString() == "Y") { e.Cancel = true; } } 這樣就不會進入Edit狀態了。
Windows的表單,如何在Apply時撿查自訂的條件,並使存檔無效? 可以在InfoNavigator的BeforeItemClick事件中去檢查,如果有異常可以用e.Cancel來取消存檔。 if (e.ItemName == "Apply") { if (not 你的條件) e.Cancel = true; // 取消動作 }
如何做到資料庫欄位限制只能輸入整數值,不能為小數,若為非整數資料會報錯誤訊息? Windows可以通過KeyPress的處理來避免,比如在TextBox的Validating的事件寫程式處理,若是infoDataGridView可以在GridView的CellValidating事件中判斷。當然也可以用DefaultValidate來處理,這個也比較簡單可靠,還可以使用VS自身的MaskedTextBox。
有三個TextBox,其中一個欄位的值等於另兩個欄位的值的相乘,請問這要在什麼事件裏寫合適? 可對兩個欄位的TextBox中的TextChanged或者leave事件中來設計,如下: private void TextBox1_TextChanged(object sender, EventArgs e) { TextBox3.Text=Convert.ToDecimal(TextBox1.Text)*Convert.ToDecimal(TextBox2.Tex); }
為何貼上MultiLanguage後,無法在MultiLanguage中自動取得各元件的文字屬性內容? 在使用MultiLanguage元件時,需要將Form的Localizable的屬性設為True,這樣可以把設計者新增的元件自動產生到本元件的設定內容中。
請問 VB.NET Client如何 call ServerMethod? 例如:Server端的module為S001.dll,裏面有一個Server Method名稱為TestMethod 同步的情況: Dim param(2) As Object param(1) = "param1" param(2) = "param2" Dim obj = Srvtools.CliUtils.CallMethod("S001", "TestMethod", param) 異步的情況: Public Sub CallBack(ByVal obj1() As Object) MsgBox(obj1(0).ToString + " --" + obj1(1)) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim obj1(2) As Object obj1(1) = "1" obj1(2) = "2" Srvtools.CliUtils.AsyncCallMethod("sTDORDER", "MyCount", obj1, AddressOf CallBack) End Sub
Win Form如何進行偵錯? 在Solution下將EEPNetClient設定為啟動項。 打開EEPNetServer的情況下,點選工具列上的綠色 按鈕,此時EEPNetServer會自動啟動。 此時,EEPNetClient會自動打開這樣Client的除錯即可開始。
Win Form下,要如何知道A/P Server的時間 有一個系統變數: "_ServerToDay"可以使用,會抓Server最新日期: string serverdate=CliUtils.GetValue("_ServerToday"); ServerTime的取法: object[] myRet = CallMethod("GLModule", "GetServerTime", new object[] { }); if (myRet != null && (int)myRet[0] == 0) { ServerDate = (string)myRet[1]; ServerTime = (string)myRet[2]; }
如何在win form上設計附件上傳的功能 OpenFileDialog為vs自帶元件 openFileDialog1.ShowDialog(); // 請再Form上貼入這個元件 string f = openFileDialog1.FileName; // 取FileName string serverfile = "xxxx"; //自已命名 CliUtils.UpLoad(f, ServerFile); //上傳到a/p server上. ** 注意, filename與pathname要自行規劃.
在Windows中,如何使用預設的程式打開存在的檔案? 在Windows的檔案總管中都可以直接點選檔案即可呼叫預設的程式來打開,因此在EEP2006中,我們可以用以下的方式來完成同樣的任務: System.Diagnostics.Process.Start(TextBox1.Text); //用預設的程式打開指定檔案.
在frmClientMain TreeView Menu是否可以自動顯示還有子項目(+),不要等點選後才出現,要如何設定? 可以自行修改TreeView顯示的層數,打開frmClientMainExtend.cs,修改TreeViewLevel的值,重新編譯EEPNetClient即可。
要如何比對使用者填入的密碼與資料庫中加密後的密碼是否一致? 以下的方法是取得密碼加密的字串: string enPwd = sUserPwd; if (sUserPwd != "") { char[] p = new char[] { }; bool q = Encrypt.EncryptPassword(sUserId, sUserPwd, 10, ref p, false); enPwd = new string(p); } 可以直接用enPwd與從User表中取得的密碼直接比較,如果相等表示輸入的密碼正確。
隱藏副檔中的某一個欄位的時機點,如欄位B根據欄位A的值來決定是否顯示? 可以在A欄位綁定完成時處理,如 public Form1() { InitializeComponent(); InfoTextBoxA.DataBindings["Text"].BindingComplete += delegate(object sender, BindingCompleteEventArgs e) { if (InfoTextBoxA.Text == "A")//如果滿足條件 { InfoTextBoxB.Visible = true; } else { InfoTextBoxB.Visible = false; } } }
WinForm要如何讀取文字檔? FileStream fs = File.Open("文字檔路徑"); StreamReader sr = new StreamReader(fs); String str = sr.ReadLine();//讀取一行 str = sr.ReadToEnd();//讀取所有 需要添加System.IO的引用。
日期可以由 2007/8/9 改成 2007/08/09 的顯示格式嗎? string newvalue = DateTime.Parse("2007/8/9").ToString("yyyy/MM/dd"); 如果是gridview的column的話,可以設定Column的DefaultCellStyle屬性的Format為yyyy/MM/dd。
在WinForm裡面如何取得一個全局的變量? 在frmClientMain.cs裡面定義了一個全局的靜態變量, public static string SHOP_CODE = "1"; 可以在Form裡這麼做: using System.Reflection; Type T = MdiParent.GetType(); FieldInfo F = T.GetField("SHOP_CODE"); String S = (String)F.GetValue(MdiParent); MessageBox.Show(S);
如何實現,同一台機器不能同時run兩個EEPNetClient? 程式: frmClientMain.cs 在static void Main()中加入下列程式即可: System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("EEPNetClient"); if (ps.Length >1) { MessageBox.Show("EEPNetClient Can not run once! "); Return; }
在Client端運行時,出現“從字元字串轉換到datetime時,轉換失敗”的錯誤? 由於客戶機器的默認時間格式不一致造成的,可以修改代碼來確保不受到影響,例如: sql = "SELECT * From orders where orderdate = '" + date + "'"; 改為: sql = "SELECT * From orders where orderdate = '" + date.ToString("yyyy/MM/dd") + "'";
如何在EEP Window Form內呼叫IE並將HTTP位址字串傳入,以跳出IE來連結WEB? using System.Diagnostics; string url = "http://www.infolight.com.tw"; Process.Start("iexplore.exe", url);