C# 开发和使用中的23个技巧

 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接受回车键消息(假没没有按钮的情况下)?

  private void 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 --- 用户不能直接编辑文本部分。用户必须单击箭头按钮来显示列表部分。

  Simple --- 文本部分可编辑。列表部分总可见。

  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 col1||col2 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);

  private void 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后打印时每一页显示’当前页/共几页’,怎样实现?

  ①

  private void 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;

  

  }

  

  private void 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: AssemblyKeyFile("..//..//keyfile.sn")]

  生成dll后,用gacutil /i myDll.dll放进Global Assembly Cach.

  28.在Oracle里如何取得某字段第一个字母为大写英文A~Z之间的记录?

  select * from table where ascii(substr(字段,1,1)) between ascii('A') and ascii('Z')

  29.怎样取得当前Assembly的版本号?

  Process current = Process.GetCurrentProcess();

  FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(current.MainModule.FileName);

  Console.WriteLine(myFileVersionInfo.FileVersion);

  30.怎样制作一个简单的winform安装程序?

  ① 建一个WinForm应用程序,最最简单的那种。运行。

  ② 添加新项目->安装和部署项目,‘模板’选择‘安装向导’。

  ③ 连续二个‘下一步’,在‘选择包括的项目输出’步骤打勾‘主输出来自’,连续两个‘下一步’,‘完成’。

  ④ 生成。

  ⑤ 到项目目录下找到Setup.exe(还有一个.msi和.ini文件),执行。

  31.怎样通过winform安装程序在Sql Server数据库上建表?

  ① [项目]—[添加新项]

  类别:代码;模板:安装程序类。

  名称:MyInstaller.cs

  ② 在SQL Server建立一个表,再[所有任务]—[生成SQL脚本]。

  生成类似如下脚本(注意:把所有GO语句去掉):

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[MyTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

  drop table [dbo].[MyTable]

  

  CREATE TABLE [dbo].[MyTable] (

  [ID] [int] NOT NULL ,

  [NAME] [nchar] (4) COLLATE Chinese_PRC_CI_AS NOT NULL

  ) ON [PRIMARY]

  

  

  ALTER TABLE [dbo].[MyTable] WITH NOCHECK ADD

  CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED

  (

  [ID]

  ) ON [PRIMARY]

  ③ [项目]—[添加现有项]。mytable.sql—[生成操作]-[嵌入的资源]。

  ④ 将MyInstaller.cs切换到代码视图,添加下列代码:

  先增加:

  using System.Reflection;

  using System.IO;

  然后:

  private string GetSql(string Name)

  {

  try

  {

    Assembly Asm = Assembly.GetExecutingAssembly();

    Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);

    StreamReader reader = new StreamReader(strm);

    return reader.ReadToEnd();

  }

  catch (Exception ex)

  {

    Console.Write("In GetSql:"+ex.Message);

    throw ex;

  }

  }

  

  private void ExecuteSql(string DataBaseName,string Sql)

  {

  System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();

  sqlConn.ConnectionString = "server=myserver; uid=sa; password=; database=master";

  System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConn);

  

  Command.Connection.Open();

  Command.Connection.ChangeDatabase(DataBaseName);

  try

  {

  Command.ExecuteNonQuery();

  }

  finally

  {

  Command.Connection.Close();

  }

  }

  protected void AddDBTable(string strDBName)

  {

  try

  {

  ExecuteSql("master","create DATABASE "+ strDBName);

  ExecuteSql(strDBName,GetSql("mytable.sql"));

  }

  catch(Exception ex)

  {

  Console.Write("In exception handler :"+ex.Message);

  }

  }

  

  public override void Install(System.Collections.IDictionary stateSaver)

  {

  base.Install(stateSaver);

  AddDBTable("MyDB"); //建一个名为MyDB的DataBase

  }

  ⑤ [添加新项目]—[项目类型:安装和部署项目]—[模板:安装项目]—[名称:MySetup]。

  ⑥ [应用程序文件夹]—[添加]—[项目输出]—[主输出]。

  ⑦ 解决方案资源管理器—右键—[安装项目(MySetup)]—[视图]—[自定义操作]。[安装]—[添加自定义操作]—[双击:应用程序文件夹]的[主输出来自***(活动)]。

  32.怎样用TreeView显示父子关系的数据库表(winform)?

  三个表a1,a2,a3, a1为a2看母表,a2为a3的母表。

  a1: id, name

  a2: id, parent_id, name

  a3: id, parent_id, name

  用三个DataAdapter把三个表各自Fill进DataSet的三个表。

  用DataRelation设置好三个表之间的关系。

  

  foreach(DataRow drA1 in ds.Tables["a1"].Rows)

  {

   tn1 = new TreeNode(drA1["name"].ToString());

   treeView1.Nodes.Add(tn1);

   foreach(DataRow drA2 in drA1.GetChildRows("a1a2"))

   {

  tn2 = new TreeNode(drA2["name"].ToString());

  tn1.Nodes.Add(tn2);

  foreach(DataRow drA3 in drA2.GetChildRows("a2a3"))

  {

   tn3 = new TreeNode(drA3["name"].ToString());

   tn2.Nodes.Add(tn3);

  }

   }

  }

  33.怎样从一个form传递数据到另一个form?

  假设Form2的数据要传到Form1的TextBox。

  在Form2:

  // Define delegate

  public delegate void SendData(object sender);

  // Create instance

  public SendData sendData;

  在Form2的按钮单击事件或其它事件代码中:

  if(sendData != null)

  {

   sendData(txtBoxAtForm2);

  }

  this.Close(); //关闭Form2

  在Form1的弹出Form2的代码中:

  Form2 form2 = new Form2();

  form2.sendData = new Form2.SendData(MyFunction);

  form2.ShowDialog();

  ====================

  private void MyFunction(object sender)

  {

  textBox1.Text = ((TextBox)sender).Text;

  } 
第21章 打印与报表技术 579 21.1 报表设计技术 580 0994 如何快速创建水晶报表 580 0995 如何编写带图片的报表 582 0996 如何使图片成为整个报表的背景 583 0997 如何设置水晶报表节的背景图片 583 0998 如何设置水晶报表节的背景色 584 0999 如何设置水晶报表的页面 584 1000 如何在报表添加节 584 1001 如何在报表移动节的顺序 585 1002 如何在报表合并节 585 1003 如何在报表册除节 585 1004 如何在报表显示与隐藏节 586 1005 如何设置多列样式报表 586 1006 如何设置报表节的高度 587 1007 如何设置报表的摘要信息 587 1008 如何设置报表的打印日期与时间 587 21.2 报表格式化类对象技巧 588 1009 如何在报表使用文本对象 588 1010 如何移动对象操作 588 1011 如何对齐多个对象 589 1012 如何使用公式字段 589 1013 如何在报表使用线 590 1014 如何在报表使用方框 590 21.3 报表数据排序与分组技巧 591 1015 如何排序报表数据 591 1016 如何报表数据分组 591 1017 如何报表筛选数据 592 1018 如何对分组报表的页码进行设置 592 21.4 报表的应用技巧 593 1019 如何在水晶报表使用交叉表 593 1020 如何在水晶报表使用子报表 594 1021 如何动态显示子报表 596 1022 如何删除子报表 597 1023 如何在报表计算百分比 597 21.5 Windows打印控件应用技巧 599 1024 如何使用PrintDocument控件打印窗体数据 599 1025 如何使用PrintPreviewContronl控件预览 599 1026 使用PrintPreviewDialog对话框 600 1027 如何使用PrintDialog对话框打印 601 1028 如何使用PageSetupDialog对话框设置页面 601 1029 如何使用PrintDocument控件打印文本文件 602 第22章 C#高级应用开发 605 22.1 线程的使用 606 1030 如何开始一个线程 606 1031 如何结束一个线程 606 1032 如何使线程休眠 606 1033 如何挂起一个线程 606 1034 如何判断线程的状态 606 1035 如何实现线程的同步 607 1036 如何避免死锁 607 22.2 .NET 2.0的新特性 607 1037 如何使用泛型 607 1038 如何使用匿名方法 608 1039 如何使用迭代器 609 1040 如何使用分部类 610 22.3 C#WebService 610 1041 建立SQL Server返回数据集WebService 610 1042 利用WebService传送图片 611 22.4 文件监视 611 1043 如何监视文件的创建 611 1044 如何监视文件的改变 612 1045 如何监视文件的重命名 612 1046 如何监视文件的删除 613 22.5 C#高级应用 613 1047 如何将聊天程序做成Windows服务 613 1048 COM+服务解决同时访问大量数据并发性 615 1049 COM+服务实现银行转账系统 617 1050 如何用Remoting技术传送文件 619 1051 大规模数据访问时缓解服务器压力 62023章 硬件及相关开发技术 623 23.1 语音卡、IC卡、神龙卡的使用 624 1052 利用语音卡拨打电话 624 1053 客户来电查询系统 625 1054 向IC卡写入数据 626 1055 从IC卡读取数据 627 1056 利用IC卡制作考勤程序 628 1057 利用神龙卡制作练歌房点歌程序 629 23.2 串口技术与加密狗技术 631 1058 使用串口传输数据 631 1059 通过串口控制对方计算机 631 1060 密码写入与读出加密狗 633 1061 利用加密狗制作登录程序 634 1062 利用条形码销售商品 635 23.3 其他 636 1063 简易摄像头程序 636 1064 超市摄像头定时监控系统 638 1065 利用短信猫收发短信息 639 1066 利用短信远程关闭计算机 641 1067 短信息采集烟草销售数据 643 第24章 网络开发相关技术 645 24.1 Windows服务控制 646 1068 如何暂停IIS的默认网站 646 1069 如何继续IIS的默认网站 646 1070 如何启
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值