加载共享目录中的所有图片信息,以及图片对应的xml用户信息,以DataGridView的形式呈现,勾选对应的用户,就加载这个人的图片以及用户信息,并显示进度条。
1.这里是共享目录:(每个用户包含6张图,以及一个同名的xml文件)
2.保存用户信息的xml文件:
3.进度条界面:
对应代码:
public partial class FrmProcsBar : Form
{
public FrmProcsBar(int _Min,int _Max)
{
InitializeComponent();
//设置最大范围值
progressBar1.Maximum = _Max;
//设置最小范围
progressBar1.Value = progressBar1.Minimum = _Min;
}
private void FrmProcsBar_Load(object sender, EventArgs e)
{
this.Owner.Enabled = false;
}
private void FrmProcsBar_FormClosed(object sender, FormClosedEventArgs e)
{
this.Owner.Enabled = true;
}
public void setPos(int value)
{
if (value < progressBar1.Maximum)
{
//设置进度值
progressBar1.Value = value;
label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";
}
//重点,必须加上,否则父子窗体都假死
Application.DoEvents();
}
}
4.调用进度条,并解析数据
FrmProcsBar fm;
delegate void EventUpload_Img(object sender, EventArgs e);
public string sourcePath = "";
public DataTable myDt = new DataTable();
public ShareImgDataSelect(string _sourcePath)
{
InitializeComponent();
this.sourcePath = _sourcePath;
InitColumns();
}
public void InitColumns()
{
DataGridViewTextBoxColumn textCol = new DataGridViewTextBoxColumn();
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "MemberId";
textCol.Width = 313;
textCol.Name = "MemberId";
textCol.DataPropertyName = "MemberId";
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("MemberId",typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "姓名";
textCol.Width = 130;
textCol.Name = "MemberName";
textCol.DataPropertyName = "MemberName";
textCol.ReadOnly = true;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("MemberName", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "拍照日期";
textCol.Name = "CreateTime";
textCol.DataPropertyName = "CreateTime";
textCol.Width = 300;
textCol.ReadOnly = true;
textCol.Visible = true;
textCol.MaxInputLength = 30;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
dgCustomer.Columns["CreateTime"].DefaultCellStyle.Format = "yyyy/MM/dd hh:mm:ss";
myDt.Columns.Add("CreateTime", typeof(DateTime));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "性别";
textCol.Name = "Sex";
textCol.DataPropertyName = "Sex";
textCol.Width = 75;
textCol.ReadOnly = true;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("Sex", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "生日";
textCol.Name = "BirthDay";
textCol.DataPropertyName = "BirthDay";
textCol.Width = 180;
textCol.ReadOnly = true;
textCol.Visible = true;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("BirthDay", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "手机号码";
textCol.Name = "Moblie";
textCol.DataPropertyName = "Moblie";
textCol.Width = 180;
textCol.ReadOnly = true;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("Moblie", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "病历号";
textCol.Name = "QQ";
textCol.DataPropertyName = "QQ";
textCol.Width = 180;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("QQ", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "微信号";
textCol.Name = "WX";
textCol.DataPropertyName = "WX";
textCol.Width = 100;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("WX", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "患者编号";
textCol.Name = "Code";
textCol.DataPropertyName = "Code";
textCol.Width = 190;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("Code", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "疾病名称";
textCol.Name = "SdDisease";
textCol.DataPropertyName = "SdDisease";
textCol.Width = 190;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("SdDisease", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "MainDisease";
textCol.Name = "MainDisease";
textCol.DataPropertyName = "MainDisease";
textCol.Width = 200;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("MainDisease", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "治疗项目";
textCol.Name = "CureProject";
textCol.DataPropertyName = "CureProject";
textCol.Width = 200;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("CureProject", typeof(string));
textCol = new DataGridViewTextBoxColumn();
textCol.HeaderText = "病历诊断";
textCol.Name = "DiseaseDiagnosis";
textCol.DataPropertyName = "DiseaseDiagnosis";
textCol.Width = 260;
textCol.ReadOnly = true;
textCol.Visible = false;
textCol.SortMode = DataGridViewColumnSortMode.NotSortable;
textCol.DefaultCellStyle.Font = new Font("宋体", 20);
dgCustomer.Columns.Add(textCol);
myDt.Columns.Add("DiseaseDiagnosis", typeof(string));
DataGridViewCheckBoxColumn checkIsUse = new DataGridViewCheckBoxColumn();
checkIsUse.HeaderText = "选择";
checkIsUse.Name = "上传";
checkIsUse.DataPropertyName = "上传";
checkIsUse.Width = 100;
textCol.DefaultCellStyle.Font = new Font("宋体", 25);
checkIsUse.SortMode = DataGridViewColumnSortMode.NotSortable;
dgCustomer.Columns.Add(checkIsUse);
myDt.Columns.Add("上传", typeof(int));
}
private void LightDataSelect_Load(object sender, EventArgs e)
{
LoadData();
// 判断目标目录是否存在如果不存在则新建
if (!System.IO.Directory.Exists(Tool.sResPicsDir))
{
System.IO.Directory.CreateDirectory(Tool.sResPicsDir);
}
}
public void LoadData()
{
string MemberId, MemberName;
string Sex, Birthday, Moblie, QQ, WX, CreateTime, Code, faceview;
string strXmlFileName;
string[] filedir = Directory.GetFiles(sourcePath, "*.xml", SearchOption.AllDirectories);
for (int i = 0; i < filedir.Length; i++)
{
string xmlfile = filedir[i];
strXmlFileName = System.IO.Path.GetFileName(xmlfile);
string[] strImage = strXmlFileName.Split('.');
//这里首先要过滤掉,上次已经加载的批次图片
if (IsExitInDb(strImage[0]))
{
continue;
}
//读取xml数据
XmlDocument xml = new XmlDocument();
xml.Load(xmlfile);//加载xml文件
XmlNode xn = xml.DocumentElement;
MemberId = xn["MemberId"].InnerText;
MemberName = xn["MemberName"].InnerText.Trim();
Sex = xn["Sex"].InnerText;
Birthday = xn["Birthday"].InnerText;
Moblie = xn["Moblie"].InnerText;
QQ = xn["QQ"].InnerText;
WX = xn["WX"].InnerText;
CreateTime = xn["CreateTime"].InnerText.Trim();
Code = xn["Code"].InnerText;
faceview = xn["faceview"].InnerText;
DataRow row = myDt.NewRow();
row["MemberId"] = MemberId;
row["MemberName"] = MemberName;
row["Sex"] = Sex;
row["BirthDay"] = Birthday;
row["Moblie"] = Moblie;
row["QQ"] = QQ;
row["WX"] = WX;
row["CreateTime"] = CreateTime;
row["Code"] = Code;
//把faceview暂时放到这个字段
row["SdDisease"] = faceview;
row["MainDisease"] = filedir[i];
row["上传"] = 0;
myDt.Rows.Add(row);
}
dgCustomer.DataSource = myDt;
}
/// <summary>
/// 判断当前的xml文件名,对应的图片是否已经加载过
/// </summary>
/// <param name="name">xml文件名,对应的图片名字</param>
/// <returns></returns>
public bool IsExitInDb(string name)
{
bool result = false;
string sql = $"select * from CBS_member_Pics where 肤质 like '%{name}%'";
DataTable dt = SqlHelper.ExecuteAccessDataTable(sql);
if (dt != null && dt.Rows.Count > 0)
{
result = true;
}
return result;
}
private void dgvDataTime_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
for (int i = 0; i < dgCustomer.Rows.Count; i++)
{
int j = i + 1;
dgCustomer.Rows[i].HeaderCell.Value = j.ToString();
dgCustomer.Rows[i].HeaderCell.Style.Font = new Font("宋体", 20);
}
}
private void dgvDataTime_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//获取选中的数据
bool isSelect = false;
if (!Convert.IsDBNull(dgCustomer.Rows[e.RowIndex].Cells["上传"].Value))
{
isSelect = Convert.ToBoolean(dgCustomer.Rows[e.RowIndex].Cells["上传"].Value);
}
if (isSelect)
{
dgCustomer.Rows[e.RowIndex].Cells["上传"].Value = false;
dgCustomer.Rows[e.RowIndex].Selected = false;
}
else
{
dgCustomer.Rows[e.RowIndex].Cells["上传"].Value = true;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnOk_Click(object sender, EventArgs e)
{
fm = new FrmProcsBar(0, 101);
this.Invoke(new EventUpload_Img(Upload_Img), sender, e);
}
private void Upload_Img(object sender, EventArgs e)
{
fm.Show(this);
DataTable dt = dgCustomer.DataSource as DataTable;
DataTable _SelectData = dt.Copy();
fm.setPos(0);//设置进度条位置0%
_SelectData.Clear();
if (dt != null && dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
bool isSelect = false;
if (!Convert.IsDBNull(dgCustomer.Rows[i].Cells["上传"].Value))
{
isSelect = Convert.ToBoolean(dgCustomer.Rows[i].Cells["上传"].Value);
}
if (isSelect)
{
DataRow row = _SelectData.NewRow();
row["MemberId"] = dt.Rows[i]["MemberId"]?.ToString();
row["MemberName"] = dt.Rows[i]["MemberName"]?.ToString();
row["Sex"] = dt.Rows[i]["Sex"]?.ToString();
row["BirthDay"] = dt.Rows[i]["Birthday"]?.ToString();
row["Moblie"] = dt.Rows[i]["Moblie"]?.ToString();
row["QQ"] = dt.Rows[i]["QQ"]?.ToString();
row["WX"] = dt.Rows[i]["WX"]?.ToString();
row["CreateTime"] = dt.Rows[i]["CreateTime"]?.ToString();
row["Code"] = dt.Rows[i]["Code"]?.ToString();
row["SdDisease"] = dt.Rows[i]["SdDisease"]?.ToString();
row["MainDisease"] = dt.Rows[i]["MainDisease"]?.ToString();
row["上传"] = Convert.ToInt32(dt.Rows[i]["上传"]?.ToString());
_SelectData.Rows.Add(row);
}
}
}
if (_SelectData != null && _SelectData.Rows.Count > 0)
{
//加载选中的内容
string MemberId = "", MemberName = "", Sex = "", Moblie = "", QQ = "", WX = "", Code = "";
int faceView = 0;
string strSQL, AId = "";
string ImageDir = "";
string strSQL1 = "", strXmlFileName = "", strFileName = "", ImagePath = "", ImageType = "";
DateTime Birthday = DateTime.Now, CreateTime = DateTime.Now;
int PoreData, UVLowLevelData, UVDeepLevelData, BuLinData, WenLiData, RedAreaData, BrownAreaData, LowLevelWrinkleData, XiWenData, DeepLevelWrinkleData, RedAreaProportion;
//每一条数据,占百分比的值
int oneTimeValue = 100 / _SelectData.Rows.Count;
//进度条的值
int jdtValue = 0;
for (int i = 0; i < _SelectData.Rows.Count; i++)
{
MemberId = _SelectData.Rows[i]["MemberId"]?.ToString();
MemberName = _SelectData.Rows[i]["MemberName"]?.ToString();
Sex = _SelectData.Rows[i]["Sex"]?.ToString();
Birthday = Convert.ToDateTime(_SelectData.Rows[i]["BirthDay"]?.ToString());
Moblie = _SelectData.Rows[i]["Moblie"]?.ToString();
QQ = _SelectData.Rows[i]["QQ"]?.ToString();
WX = _SelectData.Rows[i]["WX"]?.ToString();
CreateTime = Convert.ToDateTime(_SelectData.Rows[i]["CreateTime"]?.ToString());
Code = _SelectData.Rows[i]["Code"]?.ToString();
//把faceview暂时放到这个字段
faceView = Convert.ToInt32(_SelectData.Rows[i]["SdDisease"]?.ToString());
string xmlfile = _SelectData.Rows[i]["MainDisease"]?.ToString();
strXmlFileName = System.IO.Path.GetFileName(xmlfile);
string[] strImage = strXmlFileName.Split('.');
AId = "";
strSQL = $"select * from tbl_member where MemberId ='{MemberId}'";
DataTable dt2 = SqlHelper.ExecuteAccessDataTable(strSQL);
if (dt2 == null || dt2.Rows.Count == 0)
{
AId = Guid.NewGuid().ToString("N");
SqlHelper.ExecuteAccessNonQuery($@"insert into tbl_member(MemberId,MemberName,Sex,Birthday,Moblie,QQ,WX,CreateTime,Code)
values('{MemberId}','{MemberName}','{Sex}','{Birthday}','{Moblie}',
'{QQ}','{WX}','{CreateTime}','{Code}')");
SqlHelper.ExecuteAccessNonQuery($@"insert into CBS_member_Pics(ID,MemberID,faceview,CreateDate)
values('{ AId }','{MemberId }','{faceView}','{ CreateTime }')");
}
bool flag = true;
string fz = "", fs = "", uv = "", zsq = "", zsqkx = "", hsq = "", hsqkx = "", uvsc = "", uvsckx = "", uvqc = "", uvqckx = "", hxs = "", mk = "", bl = "", wl = "", zw = "";
// 遍历所有的文件
string[] fileList = Directory.GetFiles(sourcePath, strImage[0] + "*.jpg", SearchOption.AllDirectories);
if (fileList.Length > 0)
{
//每张图片占一批次数据百分比
int onePicValue = oneTimeValue / fileList.Length;
for (int j = 0; j < fileList.Length; j++)
{
strFileName = System.IO.Path.GetFileName(fileList[j]);
string[] strArr = strFileName.Split('_');
string[] str2 = fileList[j].Split('\\');
string beforeName = str2[3];
if (strArr.Length < 3)
{
continue;
}
MemberName = strArr[0];
ImagePath = strArr[0] + "_" + strArr[1] + "\\" + beforeName;
ImageType = strArr[2];
ImageDir = MemberName + "(" + MemberId + ")";
//创建customers下一级目录
if (!Directory.Exists(Tool.sResPicsDir + "\\" + ImageDir))
{ Directory.CreateDirectory(Tool.sResPicsDir + "\\" + ImageDir); }
//创建customers下二级目录
if (!Directory.Exists(Tool.sResPicsDir + "\\" + ImageDir + "\\" + ImagePath))
{ Directory.CreateDirectory(Tool.sResPicsDir + "\\" + ImageDir + "\\" + ImagePath); }
ImagePath = ImagePath + "\\" + strFileName;
if (flag)
{
strSQL1 = $"select * from CBS_member_Pics where MemberId ='{MemberId}' and 肤质 like '%{strArr[1]}%'";
DataTable dt3 = SqlHelper.ExecuteAccessDataTable(strSQL1);
if (dt3 != null && dt3.Rows.Count > 0)
{
break;
}
else
{
if (string.IsNullOrWhiteSpace(AId))
{
AId = Guid.NewGuid().ToString("N");
SqlHelper.ExecuteAccessNonQuery($@"insert into CBS_member_Pics(ID,MemberID,faceview,CreateDate)
values('{AId}','{MemberId}','{faceView}','{ CreateTime}')");
}
}
flag = false;
}
if (ImageType.Contains("PL"))
{
fz = ImagePath;
}
else if (ImageType.Contains("RGB"))
{
fs = ImagePath;
}
else if (ImageType.Substring(0, ImageType.IndexOf('.')) == "UV")
{
uv = ImagePath;
}
else if (ImageType.Substring(0, ImageType.IndexOf('.')) == "棕色区")
{
zsq = ImagePath;
}
else if (ImageType.Contains("棕色区框选"))
{
zsqkx = ImagePath;
}
else if (ImageType.Substring(0, ImageType.IndexOf('.')) == "红色区")
{
hsq = ImagePath;
}
else if (ImageType.Contains("红色区框选"))
{
hsqkx = ImagePath;
}
else if (ImageType.Substring(0, ImageType.IndexOf('.')) == "UV深层")
{
uvsc = ImagePath;
}
else if (ImageType.Contains("UV深层框选"))
{
uvsckx = ImagePath;
}
else if (ImageType.Substring(0, ImageType.IndexOf('.')) == "UV浅层")
{
uvqc = ImagePath;
}
else if (ImageType.Contains("UV浅层框选"))
{
uvqckx = ImagePath;
}
else if (ImageType.Contains("红血丝"))
{
hxs = ImagePath;
}
else if (ImageType.Contains("毛孔"))
{
mk = ImagePath;
}
else if (ImageType.Contains("卟啉"))
{
bl = ImagePath;
}
else if (ImageType.Contains("纹理"))
{
wl = ImagePath;
}
else if (ImageType.Contains("皱纹"))
{
zw = ImagePath;
}
CopyFile(fileList[j], Tool.sResPicsDir + "\\" + ImageDir + "\\" + ImagePath, 10240000);
jdtValue += onePicValue * (j + 1);
fm.setPos(jdtValue);//设置进度条位置
}
SqlHelper.ExecuteAccessNonQuery($@"update CBS_member_Pics set 肤质 ='{fz}',肤色 ='{fs}',UV ='{uv}',棕色区 ='{zsq}',棕色区_1 ='{zsqkx}',
红色区 ='{hsq}',红色区_1 ='{hsqkx}',UV深层 ='{uvsc}',UV深层框选 ='{uvsckx}',
UV浅层 ='{uvqc}',UV浅层框选 ='{uvqckx}',红血丝 ='{hxs}',毛孔 ='{mk}',
卟啉 ='{bl}',纹理 ='{wl}',皱纹 ='{zw}' where ID ='{AId}'");
}
else
{
MessageBox.Show("无图片可加载!");
}
}
fm.setPos(100);
MessageBox.Show("加载成功!");
this.Close();
}
else
{
MessageBox.Show("请勾选要加载的数据!");
}
}
/// <summary>
/// 复制文件
/// </summary>
/// <param name="fromFile">要复制的文件</param>
/// <param name="toFile">要保存的位置</param>
/// <param name="lengthEachTime">每次复制的长度</param>
private void CopyFile(string fromFile, string toFile, int lengthEachTime)
{
FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);
FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);
int lengthToCopy;
if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度
{
byte[] buffer = new byte[lengthEachTime];
int copied = 0;
while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分
{
lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, lengthEachTime);
copyToFile.Flush();
copyToFile.Position = fileToCopy.Position;
copied += lengthToCopy;
}
int left = (int)fileToCopy.Length - copied;//拷贝剩余部分
lengthToCopy = fileToCopy.Read(buffer, 0, left);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, left);
copyToFile.Flush();
}
else//如果整体拷贝,即每次拷贝内容大于文件总长度
{
byte[] buffer = new byte[fileToCopy.Length];
fileToCopy.Read(buffer, 0, (int)fileToCopy.Length);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, (int)fileToCopy.Length);
copyToFile.Flush();
}
fileToCopy.Close();
copyToFile.Close();
}
private void dgCustomer_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 4)
{
e.FormattingApplied = true;
string birthDay = e.Value.ToString();
DateTime dt = Convert.ToDateTime(birthDay);
e.Value = dt.ToString("yyyy/MM/dd");
}
}
加载效果图: