110,539
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
namespace 简单对号
{
public partial class checkNum : Form
{
string strBox = "";//存储值,显示到richtextbox文本框中
int i = 0; //统计扫描多少条数据
public checkNum()
{
InitializeComponent();
}
static DataSet getExcelDataResult = new DataSet();//设置一个变量存储表格getData()的返回值
// static DataTable myTable=new DataTable();
DataView myDataView = new System.Data.DataView();
//获取datatable数据的透视表
private DataView getDataViewResult(DataTable dt,string strRowFilter)
{
DataView myDataView = null;
try
{
//dt = getExcelDataResult.Tables[0];
myDataView = new System.Data.DataView(dt); //dataview数据透视表筛选datatable中的数据,效率提高很多,比用循环遍历快,15000条数据循环遍历3秒,dataview零点几秒
myDataView.RowFilter = strRowFilter;//dataview中的 RowFilter属性:后跟一个运算符和值要作为筛选依据的列的名称。 值必须在引号中。 例如:"LastName = Smith"
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("错误信息:" + ex.Message, "出现错误");
}
return myDataView;
}
private void imei1KeyPress(object sender, KeyPressEventArgs e)
{
myDataView = null;
resultBox.Text = "";
//背景色还原初始状态
resultBox.BackColor = SystemColors.Control;
//获得属性中设置的字体,大小,风格
//判断是否回车按下,e为控件传入的一个对象,里面用户存有按下的键的char值
//通过Convert.ToChar(System.Windows.Forms.Keys.Enter)我们可以得到Enter键的char值
//.Enter可替换为其他按键
//imei1txt.Focus();
if ((imei1txt.Text.Length != 0) && (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter)))
{
try
{
string strRowFilter = "F1='" + imei1txt.Text + "'"; //dataview数据透视表查询条件
myDataView = getDataViewResult(getExcelDataResult.Tables[0], strRowFilter);
if (myDataView[0]["F1"].ToString() != "")
{
dataGridView1.DataSource = myDataView;
//entenr键按下,聚焦imei2文本框,同时选中imei2文本框
imei2txt.Focus();
imei2txt.SelectAll();
}
}
catch (Exception ex)
{
MessageBox.Show("错误信息:imei:"+imei1txt.Text+"不存在数据源中!!!" , "错误信息");
imei1txt.SelectAll();
}
}
}
private void imei2KeyPress(object sender, KeyPressEventArgs e)
{
try
{
//
if ((imei1txt.Text.Length != 0)&&(imei2txt.Text.Length != 0) && (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter)))
{
//获取dataview中的数据
//写法一:写法清晰
//string dvImei = dv.Table.Rows[0]["imei"].ToString();
//写法二:写法短,效率会相应提高
string dvImei = myDataView[0][0].ToString();
string dvSn = myDataView[0][1].ToString();
//测试使用:判断是否能读取到imei和sn
//textBox1.Text = dvImei + "\t" + dvSn;
if (dvSn == imei2txt.Text.ToString())
{
resultBox.Text = "PASS";
//设置背景色
resultBox.BackColor = System.Drawing.Color.Chartreuse;
//获得属性中设置的字体,大小,风格
resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
//将值写入本地文本文档
string str = imei1txt.Text + "\t" + imei2txt.Text + "\r\n";
File.AppendAllText("result.txt", str);
strBox += str;
showBox.Text = strBox; //追加文本框内容
i++;
totalLab.Text = "总计" + i + "行";
}
else
{
resultBox.Text = "FAIL";
//设置背景色
resultBox.BackColor = System.Drawing.Color.Red;
//获得属性中设置的字体,大小,风格
resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
}
}
else
{
//当enter键按下后才显示判断结果
if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
{
resultBox.Text = "FAIL";
//设置背景色
resultBox.BackColor = System.Drawing.Color.Red;
//获得属性中设置的字体,大小,风格
resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
}
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "错误信息");
resultBox.Text = "FAIL";
//设置背景色
resultBox.BackColor = System.Drawing.Color.Red;
//获得属性中设置的字体,大小,风格
resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
}
if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
{
//entenr键按下,聚焦imei1文本框,同时选中imei1文本框
imei1txt.Text = "";
imei2txt.Text = "";
imei1txt.Focus();
imei1txt.SelectAll();
}
}
//窗体加载事件
private void checkNum_Load(object sender, EventArgs e)
{
dataGridView1.ClearSelection();//窗体加载前先清除所有内容
string filePath = Application.StartupPath + "\\data\\data.xls";//文件路径
// string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0;";//excel表格连接字符串
//string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filePath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)文件
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filePath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此連接可以操作.xls與.xlsx文件
OleDbConnection conn = new OleDbConnection(strConn);
try
{
conn.Open();//打开连接
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
DataTable dtExcName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
//包含excel中表名的字符串数组
string[] strTableNames = new string[dtExcName.Rows.Count];
for (int i = 0; i < dtExcName.Rows.Count; i++)
{
strTableNames[i] = dtExcName.Rows[i]["TABLE_NAME"].ToString();
}
string strSql = "select * from [" + strTableNames[0] + "]";//表名的写法也应注意不同,对应的excel表为sheet1,在这里要在其后加美元符号¥,并用中括号
OleDbCommand cmd = new OleDbCommand(strSql, conn);//建立执行命令
OleDbDataAdapter oda = new OleDbDataAdapter(cmd);//建立数据适配器
oda.Fill(getExcelDataResult, "myTable");//把数据适配器中的数据读到数据集汇总的一个表中(此处表名为shyman,可以任取表名)
//指定datagridview1的数据源为数据集ds的第一张表(也就是shyman表),也可以写ds.Table["shyman"]
dataGridView1.DataSource = getExcelDataResult.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show("错误信息:未找到数据源或excel表格格式不正确(excel需2003格式)!!!");
}
finally
{
conn.Close();
}
}
}
}