winform datagridview控件使用

最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教

1.直接绑定数据源,可以绑定的数据格式有List<T>,DataTable,DataSet等,

this.dataGridView1.DataSource = list;

this.dataGridView1.DataSource = table;

this.dataGridView1.DataSource =ds.Tables["表名"];

2.手动绑定datagridview指定列的数据,datagridview列如下图:

绑定数据代码如下:

DataTable dt = cdh.checkDB_typeValue(list_rd);
if (dt.Rows.Count>0){//dataGridView2.DataSource = dt;for (int i = 0; i < dt.Rows.Count; i++){DataGridViewRow dr = new DataGridViewRow();dataGridView2.Rows.Add(dr);dataGridView2.Rows[i].Cells["档案类型"].Value = dt.Rows[i]["档案类型"].ToString();dataGridView2.Rows[i].Cells["字段"].Value = dt.Rows[i]["字段"].ToString();dataGridView2.Rows[i].Cells["错误类型"].Value = dt.Rows[i]["错误类型"].ToString();dataGridView2.Rows[i].Cells["错误数据"].Value = dt.Rows[i]["错误数据"].ToString();dataGridView2.Rows[i].Cells["档案号"].Value = dt.Rows[i]["档案号"].ToString();}btn_export.Enabled = true;}
绑定datagridview数据

3.自动生成datagridview控件并绑定数据和单元格点击事件

foreach (KeyValuePair<string, List<string>> item in ckImageMethod.errorFiles){//实例化tabpage对象TabPage tpage = new TabPage();tpage.Text = item.Key;tpage.AutoScroll = true;//实例化datagridview对象DataGridView dgv = new DataGridView();dgv.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;dgv.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;dgv.Location = new System.Drawing.Point(3, 3);dgv.Size = new System.Drawing.Size(tabControl2.Width - 15, tabControl2.Height - 35);//给datagridview添加单元格点击事件dgv.CellContentClick += Dgv_CellContentClick;//给datagridview添加文本列DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();col1.HeaderText = "文件名";DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();col2.HeaderText = "文件路径";//添加按钮列DataGridViewButtonColumn col3 = new DataGridViewButtonColumn();col3.HeaderText = "操作";col3.Name = "btnModify";col3.DefaultCellStyle.NullValue = "打开文件";dgv.Columns.Add(col1);dgv.Columns.Add(col2);dgv.Columns.Add(col3);foreach (string filePath in item.Value){string path = filePath;//给datagridview添加一行数据,因为第三列时按钮,所以不添加值也会默认添加按钮dgv.Rows.Add(path.Substring(path.LastIndexOf('\\') + 1), path);}//添加datagridview控件到tabpage中
                    tpage.Controls.Add(dgv);//添加tabpage到tabControl中
                    tabControl2.TabPages.Add(tpage);}    
后台添加datagridview控件并绑定数据

 单元格点击事件:

private void Dgv_CellContentClick(object sender, DataGridViewCellEventArgs e){DataGridView dgv = sender as DataGridView;//点击button按钮事件if (dgv.Columns[e.ColumnIndex].Name == "btnModify" && e.RowIndex >= 0){if (e.RowIndex == (dgv.RowCount - 1)){return;}//说明点击的列是DataGridViewButtonColumn列string path = dgv.Rows[e.RowIndex].Cells[1].Value.ToString();if (Directory.Exists(path)){//打开文件夹
                    System.Diagnostics.Process.Start(path);}else{//打开文件所在文件夹DirectoryInfo fi = new DirectoryInfo(path);System.Diagnostics.Process.Start(fi.Parent.FullName);}}}
单元格点击事件

 4.导出datagridview数据到excel中,我做的比较麻烦,而且我导出的是datagridview绑定的数据源datatable,如果要导出datagridview中显示的数据,要先把datagridview的数据存到datatable中,再导出。下面是导出方法

private void btn_export_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(txtPath.Text)){MessageBox.Show("保存路径不能为空!", "提示");return;}Task tk = new Task(Way);//MessageBox.Show("正在导出请稍后...");lb1.Visible = true;lb1.Text = "数据导出中,请稍后...";txtPath.Visible = false;btn_export.Enabled = false;tk.Start();}private void Way(){dataexcel.DataExcelExport(dt, txtPath.Text, "错误数据导出", "EXCEL");MessageBox.Show("数据导出完成");btn_export.Enabled = true;txtPath.Visible = true;lb1.Visible = false;}
导出datagridview数据

调用的类的方法:

public class DataExcelExportHandle {public delegate void Del_error(string StrError);public static event Del_error aa;public void DataExcelExport(DataTable QueryTable, string FilePath, string TableName, string DbType){List<string> ErrorList = new List<string>();string Query = string.Empty;//数据导出语句try{//判断Excel版本string StrVerSion = FilePath.Split('.')[1].ToString();string DataConnect = string.Empty;if (DbType == "EXCEL"){if (StrVerSion.ToLower() == "xls"){DataConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + FilePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";}if (StrVerSion.ToLower() == "xlsx"){//DataConnect = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + FilePath + ";Extended Properties='Excel 12.0 Macro; HDR = NO'";DataConnect = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + FilePath + ";Extended Properties='Excel 12.0 Xml; HDR = NO'";}}//else//{//    if (StrVerSion.ToLower() == "mdb")//    {//        DataConnect = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + FilePath;//        //判断ACCESS数据文件是否存在  不存在则创建//        if (!File.Exists(FilePath))//        {//            Catalog catalog = new Catalog();//            catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Jet OLEDB:Engine Type=5");//        }//    }//    if (StrVerSion.ToLower() == "accdb")//    {//        DataConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath;//        //判断ACCESS数据文件是否存在  不存在则创建//        if (!File.Exists(FilePath))//        {//            ADOX.Catalog catalog = new ADOX.Catalog();//            catalog.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";");//        }//    }//}//string ConnectStr = CurrencyHandle.GetXmlNumber("DataBaseDeploy", "SqlConnect");//DataTable dt = SqlDataBaseHandle.GetTable(StrDataQuery, ConnectStr);//根据表名字段动态创建表字段string CreateColumn = "create table " + TableName + " (";string QueryNumberStr = "insert into " + TableName + " (";for (int i = 0; i < QueryTable.Columns.Count; i++){CreateColumn = CreateColumn + QueryTable.Columns[i].ColumnName + " text,";QueryNumberStr = QueryNumberStr + QueryTable.Columns[i].ColumnName + ",";}QueryNumberStr = QueryNumberStr.TrimEnd(',');CreateColumn = CreateColumn.TrimEnd(',');CreateColumn = CreateColumn + ")";//创建表
                OleDataBaseHandle.OleConnectOpen(DataConnect);OleDataBaseHandle.OleImplement(CreateColumn);Query = QueryNumberStr + ") values(";for (int i = 0; i < QueryTable.Columns.Count; i++){Query = Query + "@" + QueryTable.Columns[i].ColumnName + ",";}Query = Query.Substring(0, Query.Length - 1);Query = Query + ")";int CountIndex = 1;//记录数据条数string SysTable = TableName;#region 数据导出for (int i = 0; i < QueryTable.Rows.Count; i++){try{//当导出数据超过限制时将自动创建新的表if (DbType == "EXCEL"){if (StrVerSion.ToLower() == "xlsx"){if (i > CountIndex * 1000000){CreateColumn = CreateColumn.Replace(TableName, SysTable + CountIndex);OleDataBaseHandle.OleImplement(CreateColumn);Query = Query.Replace(TableName, SysTable + CountIndex);TableName = TableName + CountIndex;CountIndex++;}}else{if (i > CountIndex * 65000){CreateColumn = CreateColumn.Replace(TableName, SysTable + CountIndex);OleDataBaseHandle.OleImplement(CreateColumn);Query = Query.Replace(TableName, SysTable + CountIndex);TableName = TableName + CountIndex;CountIndex++;}}}List<OleDbParameter> oleList = new List<OleDbParameter>();for (int k = 0; k < QueryTable.Columns.Count; k++){OleDbParameter prop = null;try{if (QueryTable.Rows[i][k] == null){prop = new OleDbParameter("@" + QueryTable.Columns[k].ColumnName, "");}else{prop = new OleDbParameter("@" + QueryTable.Columns[k].ColumnName, QueryTable.Rows[i][k].ToString());}}catch (Exception excc){aa("导出失败" + Query);ErrorList.Add(excc.Message);}oleList.Add(prop);}if (!OleDataBaseHandle.OleImplement(Query, oleList)){aa("导出失败" + Query);ErrorList.Add("导出失败" + Query);}}catch (Exception exx){aa(exx.Message + Query);ErrorList.Add(exx.Message + Query);}}#endregionOleDataBaseHandle.OleConnectColse();}catch (Exception ex){aa(ex.Message + Query);ErrorList.Add(ex.Message + Query);}finally{if (ErrorList != null && ErrorList.Count > 0){ToolHelper.ErrorInfoSave(ErrorList);}}}}
View Code

上面方法调用的ole操作类:

https://www.cnblogs.com/Li232/p/10813918.html

/// <summary>/// Ole操作类/// </summary>public class OleDataBaseHandle{private static OleDbConnection con = null;private static OleDbCommand cmd = null;/// <summary>/// 通过文件路径 获取文件的所有表名/// </summary>/// <param name="Filename">文件路径</param>/// <returns></returns>public static DataTable GetFileTableName(string Filename){string DbConnect = string.Empty;try{DbConnect = GetConnect(Filename);//通过文件获取连接字符串con = new OleDbConnection(DbConnect);con.Open();DataTable dt = new DataTable();dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });return dt;}catch (Exception){return null;}finally{if (cmd != null){cmd.Dispose();}if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}}/// <summary>/// 通过文件路径和表名获取所有数据(现支持EXCEL2003和ACCESS2003)/// </summary>/// <param name="Filename">文件路径</param>/// <param name="TableName">表名</param>/// <returns></returns>public static DataTable GetFileTableData(string Filename, string TableName){string DbConnect = string.Empty;try{DbConnect = GetConnect(Filename);//通过文件获取连接字符串con = new OleDbConnection(DbConnect);con.Open();DataTable dt = new DataTable();cmd = new OleDbCommand("select * from [" + TableName + "]", con);OleDbDataAdapter dapter = new OleDbDataAdapter(cmd);dapter.Fill(dt);return dt;}catch{return null;}finally{if (cmd != null){cmd.Dispose();}if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}}/// <summary>/// 通过数据文件和表名获取该表的所有列(现支持EXCEL2003和ACCESS2003)/// </summary>/// <param name="Filename">文件路径</param>/// <param name="TableName">文件表名</param>/// <returns></returns>public static DataTable GetFileTableName(string Filename, string TableName){List<string> ErrorList = new List<string>();OleDbCommand cmd = null;OleDbConnection con = null;string DbConnect = string.Empty;try{DbConnect = GetConnect(Filename);//通过文件获取连接字符串con = new OleDbConnection(DbConnect);con.Open();DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, TableName, null });if (dt == null || dt.Rows.Count < 1){return null;}else{return dt;}}catch (Exception ex){ErrorList.Add(ex.Message);return null;}finally{if (cmd != null){cmd.Dispose();}if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}}/// <summary>/// 通过语句执行返回结果true false/// </summary>/// <param name="StrQuery">执行的SQL语句</param>/// <returns></returns>public static bool OleImplement(string StrQuery, string ConnectStr){try{con = new OleDbConnection(ConnectStr);con.Open();cmd = new OleDbCommand(StrQuery, con);int a = cmd.ExecuteNonQuery();if (a != 0){return true;}else{return false;}}catch{return false;}finally{if (cmd != null){cmd.Dispose();}if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}}/// <summary>/// 通过数据文件和表名获取该表的所有列/// </summary>/// <param name="StrQuery">所执行的SQL语句</param>/// <returns></returns>public static bool OleImplement(string StrQuery){try{cmd = new OleDbCommand(StrQuery, con);int a = cmd.ExecuteNonQuery();if (a != 0){return true;}else{return false;}}catch (Exception exxx){return false;}}/// <summary>/// 通过连接字符串建立长链接/// </summary>/// <param name="StrConnect">连接数据库字符串</param>public static void OleConnectOpen(string StrConnect){con = new OleDbConnection(StrConnect);con.Open();}/// <summary>/// 关闭长链接并释放资源/// </summary>public static void OleConnectColse(){if (cmd != null){cmd.Dispose();}if (con != null){if (con.State == ConnectionState.Open){con.Close();con.Dispose();}}}/// <summary>/// 执行参数化SQL语句/// </summary>/// <param name="StrQuery">所执行的SQL语句</param>/// <param name="para">参数化集合</param>/// <returns></returns>public static bool OleImplement(string StrQuery, List<OleDbParameter> para){try{cmd = new OleDbCommand(StrQuery, con);foreach (var item in para){cmd.Parameters.Add(item);}cmd.ExecuteNonQuery();return true;}catch{return false;}}/// <summary>/// 通过文件路径返回ADO连接字符串/// </summary>/// <param name="Filename">文件路径</param>/// <returns></returns>public static string GetConnect(string Filename){string DbConnect = string.Empty;if (Filename.Split('.')[1].ToLower() == "xls"){DbConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + Filename + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";}else if (Filename.Split('.')[1].ToLower() == "xlsx"){DbConnect = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + Filename + ";Extended Properties='Excel 12.0 Macro; HDR = NO'";}else if (Filename.Split('.')[1].ToLower() == "mdb"){DbConnect = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Filename;}else if (Filename.Split('.')[1].ToLower() == "accdb"){DbConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Filename;}else{DbConnect = null;}return DbConnect;}/// <summary>/// 执行参数化SQL语句/// </summary>/// <param name="StrQuery">所执行的SQL语句</param>/// <returns></returns>public static DataTable OleGetTable(string FilePath, string StrQuery){OleDbConnection objConn = null;DataTable dt = new DataTable();try{string StrVerSion = FilePath.Split('.')[1].ToString();string DataConnect = string.Empty;if (StrVerSion.ToLower() == "xls"){DataConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + FilePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";}if (StrVerSion.ToLower() == "xlsx"){DataConnect = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + FilePath + ";Extended Properties='Excel 12.0 Xml; HDR = NO'";}objConn = new OleDbConnection(DataConnect);objConn.Open();//打开连接//RegistryKey reg_TypeGuessRows = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Jet\4.0\Engines\Excel");//reg_TypeGuessRows.SetValue("TypeGuessRows", 65000);cmd = new OleDbCommand(StrQuery, objConn);OleDbDataAdapter adr = new OleDbDataAdapter();adr.SelectCommand = cmd;adr.Fill(dt);objConn.Close();//OleDbDataReader  reader = cmd.ExecuteReader();//dt.Load(reader); //直接把reader转换为datatablereturn dt;}catch(Exception ex){ToolHelper.ErrorInfoSave(ex.Message);return null;}}}
上述方法中用到的ole操作类

推荐两个百度到的导出datagridview数据的博客地址,这两个写的很简单:

 

https://www.cnblogs.com/chaowang/p/6265698.html

https://www.cnblogs.com/kongxiaoshuang/p/6062368.html 

 

转载于:https://www.cnblogs.com/Li232/p/10813330.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node — 第五天

1. MySQL数据库 phpstudy 数据库服务器及图形化软件 软件链接 链接&#xff1a;https://pan.baidu.com/s/1F8wdoMstHAJkINfDKDejsw 提取码&#xff1a;xl3k 数据库对于我们前端同学来说&#xff0c;就是一个了解。 对于不会变化的数据&#xff08;省、市、县&#xff09;&…

iOS10 权限访问崩溃

手机升级了 iOS10 Beta&#xff0c;然后用正在开发的项目 装了个ipa包&#xff0c;发现点击有关 权限访问 直接Crash了&#xff0c;并在控制台输出了一些信息&#xff1a; This app has crashed because it attempted to access privacy-sensitive data without a usage descr…

Node — 第六天(前后端分离)及(身份验证)

综合应用服务端知识点搭建项目 下载安装所需的第三方模块 npm init -y npm i express cors mysql # express 用于搭建服务器 # cors 用于解决跨域 # mysql 用于操作数据库# 后面用到什么&#xff0c;再下载创建app.js 之前&#xff0c;我们开启一个服务器&#xff0c;js文件…

继承上机作业

1、实现如下类之间的继承关系&#xff0c;并编写Music类来测试这些类 2、编写一个Java应用程序&#xff0c;该程序包括3个类&#xff1a;Monkey类、People类和主类E。要求&#xff1a; (1) Monkey类中有个构造方法&#xff1a;Monkey (String s)&#xff0c;并且有个public voi…

ApplePay集成教程

Apple Pay运行环境&#xff1a;iPhone6以上设备&#xff0c;操作系统最低iOS9.0以上&#xff0c;部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。 环境搭建好后可以在模拟器上面运行&#xff0c;xcode7.2.1iPhone6SP9.2系统下&#xff0c;系统会绑定几种虚拟的银行卡…

Node — 第七天 (大事件项目接口实现一)

关于JS错误处理 node中和mysql中的错误处理 node和MySQL提供的方法&#xff0c;已经对错误信息进行了封装&#xff0c;只需要使用 err.message 即可获取到错误信息。 比如&#xff1a; const fs require(fs); // 读取一个不存在的文件 fs.readFile(abcd.txt, (err, data) …

1.Consul 简介和环境搭建

1.什么是 Consul Consul 是 service mesh(服务网格)的一个解决方案&#xff0c;它提供了诸如服务发现&#xff0c;配置和隔离等功能的一整套控制平面(control plane)。开发人员可以根据需要单独使用这些功能点&#xff0c;也可以将他们整合成为一个完整的service mesh。Consul …

Node — 第八天 (大事件项目接口实现二)

如何处理MySQL的错误 MySQL的错误信息&#xff0c;可以通过err来获取。这是没有问题的。 但是&#xff0c;我们加入了Promise&#xff0c;Promise中的错误&#xff0c;在外部是获取不到的&#xff0c;只能使用Promise相关方法来获取错误信息。 解决方法一 使用 JS原生的 tr…

在local模式下的spark程序打包到集群上运行

一、前期准备 前期的环境准备&#xff0c;在Linux系统下要有Hadoop系统&#xff0c;spark伪分布式或者分布式&#xff0c;具体的教程可以查阅我的这两篇博客&#xff1a; Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分布式环境搭建 然后在spark伪分布式的环境下必须出现如下八…

APS系统对制造企业到底有多重要?看完这5点你就明白了

第一个问题&#xff1a;需要APS吗&#xff1f; APS是否重要&#xff0c;不能从其所体现的软件工具或系统角度来说&#xff0c;而应该从业务角度来说。对于制造工厂和车间的运行而言&#xff0c;计划是核心的业务。就如同那句俗话说的&#xff0c;没有规矩不成方圆&#xff0c;领…

Node — 第九天 (大事件项目接口实现三)

文章管理接口 设计数据表 添加文章接口 编写接口&#xff0c;使用postman模拟提交formdata类型的数据 在article.js 中&#xff0c;加入 /add 路由 postman模拟提交formdata类型的数据 multer处理文件上传 下载安装multer 加载模块 const multer require(multer) 配置上…

Node — 第九天 (ES6降级 and 发布属于自己的[第三方模块]包)

ES6降级处理 因为 ES 6 有浏览器兼容性问题&#xff0c;可以使用一些工具进行降级处理&#xff0c;例如&#xff1a;babel 降级处理 babel 的使用步骤 安装 Node.js命令行中安装 babel配置文件 .babelrc运行命令&#xff0c;完成降级 项目初始化 (项目文件夹不能有中文) npm …

Vue — 第一天(极速入门)

基本介绍 vue是什么 目标&#xff1a;了解vue的一些基础概念。 官方网站&#xff1a; https://cn.vuejs.org/ vue是&#xff1a;渐进式javascript框架。 两组概念 &#xff08;1&#xff09;框架 库。只提供一些API给开发者使用。jquery 是一个js库框架。拥有自己的规则和…

Vue — 第二天(v-model和过滤器)

VUE-02-v-model和过滤器 昨日反馈与回顾 代码仓库的问题 不要修改你克隆下来的仓库中任意代码&#xff0c;否则&#xff0c;下次pull时&#xff0c;可能会报错&#xff0c;从而得到不到最新的代码。 如果已经遇到了这个冲突&#xff1a; 解决冲突(git 中解决冲突)把关键代码…

牛人iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展&#xff0c;如今的手机早已不是打电话、发短信那么简单了&#xff0c;播放音乐、视频、录音、拍照等都是很常用的功能。在iOS中对于多媒体的支持是非常强大的&#xff0c;无论是音视频播放、录制&#xff0c;还是对麦克风、摄像头的操作都提供了多套…

Vue — 第三天(计算属性和json-server)

计算属性 使用场景 如果一个结果需要依赖data中的数据&#xff0c;但是需要经过一些逻辑处理&#xff0c;才能得到你想要的数据。此时就可以使用计算属性。 例如&#xff1a;要对给定的字符串做翻转处理之后再来显示。 <div id"app"><!-- 此处逻辑复杂 …

Vue — 第四天(components组件)

问题导入 下面的代码是一个折叠面板的效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docu…

iOS开发常用的RGB色值和宏

iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // name 颜色相关 // 参数格式为&#xff1a;0xFFFFFF #define kColorWithRGB(rgbValue) \ [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 \ …

防火墙综合实验

防火墙技术综合实验 一、实验目的&#xff1a;本次实验是将多种访问控制列表以及防火墙部分的知识做一个汇总 二、实验内容 A&#xff1a;Established控制列表 拓扑图 配置步骤 1:配置各端口ip地址&#xff0c;配置登陆密码 R4: 登陆账号&#xff1a;ys 密码&#xff1a;123 2:…

iOS获取当前设备型号等信息总结 包含iPhone7和iPhone7P

#include <sys/types.h> #include <sys/sysctl.h>//获得设备型号(NSString *)getCurrentDeviceModel {int mib[2];size_t len;char *machine;mib[0] CTL_HW;mib[1] HW_MACHINE;sysctl(mib, 2, NULL, &len, NULL, 0);machine malloc(len);sysctl(mib, 2, mac…