C#開發和使用中的33個技巧
1.怎樣定製VC#DataGrid列標題?
- DataGridTableStyle dgts = new DataGridTableStyle();
- dgts.MappingName = "myTable"; //myTable為要載入資料的DataTable
- DataGridTextBoxColumn dgcs = new DataGridTextBoxColumn();
- dgcs.MappingName = "title_id";
- dgcs.HeaderText = "標題ID";
- dgts.GridColumnStyles.Add(dgcs);
- ……
- dataGrid1.TableStyles.Add(dgts);
2.檢索某個欄位為空的所有記錄的條件語句怎麼寫?
...where col_name is null
3.如何在c# Winform應用中接收回車鍵輸入?
設一下form的AcceptButton.
4.比如Oracle中的NUMBER(15),在Sql Server中應是什麼?
NUMBER(15):用numeric,精度15試試。
5.sql server的應用like語句的儲存過程怎樣寫?
- select * from mytable where haoma like ‘%’ + @hao + ‘%’
6.vc# winform中如何讓textBox接受回車鍵訊息(假沒沒有按鈕的情況下)?
- privatevoid textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
- {
- if(e.KeyChar != (char)13)
- return;
- else
- //do something;
- }
7.為什麼(Int32)cmd.ExecuteScalar()賦值給Int32變數時提示轉換無效?
Int32.Parse(cmd.ExecuteScalar().ToString());
8.DataSource為子表的DataGrid裡怎樣增加一個列以顯示母表中的某個欄位?
在子表裡手動新增一個列。
- DataColumn dc = new DataColumn("newCol", Type.GetType("System.String"));
- dc.Expression = "Parent.parentColumnName";
- dt.Columns.Add(dc); //dt為子表
9.怎樣使DataGrid顯示DataTable中某列的資料時只顯示某一部分?
select ..., SUBSTR(string, start_index, end_index) as ***, *** from ***
10.如何讓winform的combobox只能選不能輸入?
DropDownStyle 屬性確定使用者能否在文字部分中輸入新值以及列表部分是否總顯示。
值:
DropDown --- 文字部分可編輯。使用者必須單擊箭頭按鈕來顯示列表部分。
DropDownList --- 使用者不能直接編輯文字部分。使用者必須單擊箭頭按鈕來顯示列表部分。
11.怎樣使winform的DataGrid裡顯示的日期只顯示年月日部分,去掉時間?
sql語句里加上to_date(日期欄位,'yyyy-mm-dd')
12.怎樣把資料庫表的二個列合併成一個列Fill進DataSet裡?
dcChehao = new DataColumn("newColumnName", typeof(string));
dcChehao.Expression = "columnName1+columnName2";
dt.Columns.Add(dcChehao);
Oracle:
select col1col2 from table
sql server:
select col1+col2 from table
13.如何從合併後的欄位裡提取出括號內的文字作為DataGrid或其它繫結控制元件的顯示內容?即把合併後的欄位內容裡的左括號(和右括號)之間的文字提取出來。
Select COL1,COL2, case
when COL3 like ‘%(%’ THEN substr(COL3, INSTR(COL3, ‘(’ )+1, INSTR(COL3,‘)’)-INSTR(COL3,‘(’)-1)
end as COL3
from MY_TABLE
14.當用滑鼠滾輪瀏覽DataGrid資料超過一定範圍DataGrid會失去焦點。怎樣解決?
- this.dataGrid1.MouseWheel+=new MouseEventHandler(dataGrid1_MouseWheel);
- privatevoid dataGrid1_MouseWheel(object sender, MouseEventArgs e)
- {
- this.dataGrid1.Select();
- }
15.怎樣把鍵盤輸入的‘+’符號變成‘A’?
textBox的KeyPress事件中
- if(e.KeyChar == '+')
- {
- SendKeys.Send("A");
- e.Handled = true;
- }
16.怎樣使Winform啟動時直接最大化?
this.WindowState = FormWindowState.Maximized;
17.c#怎樣獲取當前日期及時間,在sql語句裡又是什麼?
c#: DateTime.Now
sql server: GetDate()
18.怎樣訪問winform DataGrid的某一行某一列,或每一行每一列?
dataGrid[row,col]
19.怎樣為DataTable進行彙總,比如DataTable的某列值‘延吉'的列為多少?
dt.Select("城市='延吉'").Length;
20.DataGrid資料匯出到Excel後0212等會變成212。怎樣使它匯出後繼續顯示為0212?
range.NumberFormat = "0000";
21.① 怎樣把DataGrid的資料匯出到Excel以供列印?
② 之前已經為DataGrid設定了TableStyle,即自定義了列標題和要顯示的列,如果想以自定義的檢視匯出資料該怎麼辦?
③ 把資料匯出到Excel後,怎樣為它設定邊框啊?
④ 怎樣使從DataGrid匯出到Excel的某個列居中對齊?
⑤ 資料從DataGrid匯出到Excel後,怎樣使標題行在列印時出現在每一頁?
⑥ DataGrid資料匯出到Excel後列印時每一頁顯示’當前頁/共幾頁’,怎樣實現?
①
- privatevoid button1_Click(object sender, System.EventArgs e)
- {
- int row_index, col_index;
- row_index = 1;
- col_index = 1;
- Excel.ApplicationClass excel = new Excel.ApplicationClass();
- excel.Workbooks.Add(true);
- DataTable dt = ds.Tables["table"];
- foreach(DataColumn dcHeader in dt.Columns)
- excel.Cells[row_index, col_index++] = dcHeader.ColumnName;
- foreach(DataRow dr in dt.Rows)
- {
- col_index = 0;
- foreach(DataColumn dc in dt.Columns)
- {
- excel.Cells[row_index+1, col_index+1] = dr[dc];
- col_index++;
- }
- row_index++;
- }
- excel.Visible = true;
- }
- privatevoid Form1_Load(object sender, System.EventArgs e)
- {
- SqlConnection conn = new SqlConnection("server=tao; uid=sa; pwd=; database=pubs");
- conn.Open();
- SqlDataAdapter da = new SqlDataAdapter("select * from authors", conn);
- ds = new DataSet();
- da.Fill(ds, "table");
- dataGrid1.DataSource = ds;
- dataGrid1.DataMember = "table";
- }
②dataGrid1.TableStyles[0].GridColumnStyles[index].HeaderText; //index可以從0~dataGrid1.TableStyles[0].GridColumnStyles.Count遍歷。
③ Excel.Range range;
range=worksheet.get_Range(worksheet.Cells[1,1],xSt.Cells[ds.Tables[0].Rows.Count+1,ds.Tables[0].Columns.Count]);
range.BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin,Excel.XlColorIndex.xlColorIndexAutomatic,null);
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle =Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight =Excel.XlBorderWeight.xlThin;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex =Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
④ range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
⑤ worksheet.PageSetup.PrintTitleRows = "$1:$1";
⑥ worksheet.PageSetup.CenterFooter = "第&P頁 / 共&N頁";
22.當把DataGrid的Cell內容賦值到Excel的過程中想在DataGrid的CaptionText上顯示進度,但不顯示。WHY?
...
dataGrid1.CaptionText = "正在匯出:" + (row + 1) + "/" + row_cnt;
System.Windows.Forms.Application.DoEvents();
...
處理當前在訊息佇列中的所有Windows訊息。
當執行Windows窗體時,它將建立新窗體,然後該窗體等待處理事件。該窗體在每次處理事件時,均將處理與該事件關聯的所有程式碼。所有其他事件在佇列中等待。在程式碼處理事件時,應用程式並不響應。如果在程式碼中呼叫DoEvents,則應用程式可以處理其他事件。
如果從程式碼中移除DoEvents,那麼在按鈕的單機事件處理程式執行結束以前,窗體不會重新繪製。通常在迴圈中使用該方法來處理訊息。
23.怎樣從Flash呼叫外部程式,如一個C#編譯後生成的.exe?
fscommand("exec", "應用程式.exe");
① 必須把flash釋出為.exe
② 必須在flash生成的.exe檔案所在目錄建一個名為fscommand的子目錄,並把要呼叫的可執行程式拷貝到那裡。
24.有沒有辦法用程式碼控制DataGrid的上下、左右的滾動?
- dataGrid1.Select();
- SendKeys.Send("{PGUP}");
- SendKeys.Send("{PGDN}");
- SendKeys.Send("{^{LEFT}"); // Ctrl+左方向鍵
- SendKeys.Send("{^{RIGHT}"); // Ctrl+右方向鍵
25.怎樣使兩個DataGrid繫結兩個主從關係的表?
- DataGrid1.DataSource = ds;
- DataGrid1.DataMember = "母表";
- ...
- DataGrid2.DataSouce = ds;
- DataGrid2.DataMember = "母表.關係名";
26.assembly的版本號怎樣才能自動生成?特別是在Console下沒有通過VStudio環境編寫程式時。
關鍵是AssemblyInfo.cs裡的[assembly: AssemblyVersion("1.0.*")],命令列編譯時包含AssemblyInfo.cs
27.怎樣建立一個Shared Assembly?
用sn.exe生成一個Strong Name:keyfile.sn,放在源程式目錄下
在專案的AssemblyInfo.cs裡[assembly: Assemb