���ؼ�Դ��
完全按你的要求写的,供参考:前提是源码源码XML文件已创建好,在窗体里选择该XML文件,设置再行操作:
窗体:
//选择XML按钮private void btnXML_Click(object sender,表格表格 EventArgs e)
{
DataTable dt = new DataTable();
OpenFileDialog xmlFile = new OpenFileDialog();
xmlFile.Filter = "*.xml|";
xmlFile.Title = "请选择xml文件";
if (xmlFile.ShowDialog() == DialogResult.OK)
{
this.txtPath.Text = xmlFile.FileName;//在textBox1控件中显示选择的路径
dt=GetXML(this.txtPath.Text);
}
if(!dt.Equals(null)&&dt.Rows.Count>0)
LoadData(dt, dgvXML);//加载到窗体中
}
//保存按钮
private void button1_Click(object sender, EventArgs e)
{
int n = SaveDgv();
if (n > 0)
{
MessageBox.Show("保存成功!");
DataTable dt = new DataTable();
dt = GetXML(this.txtPath.Text);
LoadData(dt,控件控件react 源码怎么阅读 dgvXML);//刷新加载
}
else
{
MessageBox.Show("保存失败!");
DataTable dt = new DataTable();
dt = GetXML(this.txtPath.Text);
LoadData(dt,源码源码 dgvXML);//刷新加载
}
}
//删除按钮
private void btnDelete_Click(object sender, EventArgs e)
{
int n = 0;//判断是否删除
for (int i = 0; i < dgvXML.SelectedRows.Count; i++)
{
string id = dgvXML.SelectedRows[i].Cells[0].Value.ToString();
XmlDocument doc = new XmlDocument();
doc.Load(this.txtPath.Text);
XmlNodeList nod = doc.DocumentElement.ChildNodes;
XmlNode root = doc.DocumentElement;
foreach (XmlNode peo in nod)
{
if (XmlNode.Equals(peo.SelectSingleNode("ID").InnerText, id))
{
root.RemoveChild(peo);//从根节点删除该ID的PERSON
doc.Save(this.txtPath.Text);
n++;
}
}
}
if (n > 0)
{
DataTable dt = new DataTable();
dt = GetXML(this.txtPath.Text);
LoadData(dt, dgvXML);//刷新加载
MessageBox.Show("删除成功!");
}
else
{
MessageBox.Show("删除失败!设置");
}
}
// DataGridView中加载数据
private void LoadData(DataTable dt,表格表格 DataGridView dgv)
{
dgv.Rows.Clear();//datagridview清空数据
if (dt != null && dt.Rows.Count > 0)
{
dgv.Rows.Add(dt.Rows.Count);
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int k = 0; k < dt.Columns.Count; k++)
{
dgv.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString();//赋值
}
}
}
}
//datagridview添加行号
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
e.Row.HeaderCell.Value = (e.Row.Index + 1).ToString();
}
//解析XML生成DATATABLE
private List<string> IDList = new List<string>();//用来记录已有的ID,以在修改时判断是控件控件否新增
private DataTable GetXML(string path)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("NAME");
dt.Columns.Add("SEX");
dt.Columns.Add("PHONE");
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList nod = doc.DocumentElement.ChildNodes;
foreach (XmlNode peo in nod)
{
XmlNodeList pe = peo.ChildNodes;
DataRow row = dt.NewRow();
foreach (XmlNode p in pe)
{
if (p.Name == "ID")
{
row["ID"] = p.InnerText.ToString();
IDList.Add(p.InnerText.ToString());//添加ID记录,以在修改时判断是源码源码否新增
}
if (p.Name == "NAME")
{
row["NAME"] = p.InnerText.ToString();
}
if (p.Name == "SEX")
{
row["SEX"] = p.InnerText.ToString();
}
if (p.Name == "PHONE")
{
row["PHONE"] = p.InnerText.ToString();
}
}
dt.Rows.Add(row);
}
return dt;
}
//修改dgv数据后保存到XML文件
private int SaveDgv()
{
int n = 0;
for (int i = 0; i < dgvXML.Rows.Count-1; i++)
{
XmlDocument doc = new XmlDocument();
doc.Load(this.txtPath.Text);
XmlNodeList nod = doc.DocumentElement.ChildNodes;
string id = dgvXML.Rows[i].Cells[0].Value.ToString();
if (IDList.Contains(id)) //如果是已有的ID,则修改
{
foreach (XmlNode peo in nod)
{
if (XmlNode.Equals(peo.SelectSingleNode("ID").InnerText,设置医院小程序源码 id))
{
peo.SelectSingleNode("NAME").InnerText = dgvXML.Rows[i].Cells[1].Value.ToString();//赋值姓名
peo.SelectSingleNode("SEX").InnerText = dgvXML.Rows[i].Cells[2].Value.ToString();//赋值性别
peo.SelectSingleNode("PHONE").InnerText = dgvXML.Rows[i].Cells[3].Value.ToString();//赋值电话
doc.Save(this.txtPath.Text);
n++;
break;//当找到该ID记录并修改后,跳出循环
}
}
}
else //否则为新增
{
XmlNode root = doc.DocumentElement;
XmlElement PERSON = doc.CreateElement("PERSON");
XmlElement ID = doc.CreateElement("ID");
ID.InnerText = id;//赋值id
XmlElement NAME = doc.CreateElement("NAME");
NAME.InnerText = dgvXML.Rows[i].Cells[1].Value.ToString();//赋值姓名
XmlElement SEX = doc.CreateElement("SEX");
SEX.InnerText = dgvXML.Rows[i].Cells[2].Value.ToString();//赋值性别
XmlElement PHONE = doc.CreateElement("PHONE");
PHONE.InnerText = dgvXML.Rows[i].Cells[3].Value.ToString();//赋值电话
PERSON.AppendChild(ID);
PERSON.AppendChild(NAME);
PERSON.AppendChild(SEX);
PERSON.AppendChild(PHONE);
root.AppendChild(PERSON);
doc.Save(this.txtPath.Text);//保存
n++;
}
}
return n;
}
XML文件:
<?表格表格xml version="1.0" standalone="yes"?>
<List>
<PERSON>
<ID></ID>
<NAME>测一</NAME>
<SEX>男男</SEX>
<PHONE></PHONE>
</PERSON>
<PERSON>
<ID></ID>
<NAME>再二</NAME>
<SEX>女女</SEX>
<PHONE></PHONE>
</PERSON>
<PERSON>
<ID></ID>
<NAME>张三</NAME>
<SEX>男男</SEX>
<PHONE></PHONE>
</PERSON>
<PERSON>
<ID></ID>
<NAME>王五</NAME>
<SEX>女女</SEX>
<PHONE></PHONE>
</PERSON>
</List>
如何在网页中嵌入excel控件,实现excel的控件控件在线编辑?
一般通过邮件附件发送文件的方式分享excel表格,想把一个excel表格分享给更多人时,源码源码只要把表格嵌入在网页里将是一个再好不过的方法。我们在后台对excle表格里的数据进行修改后,网页上嵌入的表格也可以自动更新.具体步骤
注册一个Zoho Docs账号,将你的excel表格上传。
在Zoho Docs里打开上传完成的excel表格,点击共享,嵌入。
在弹出的窗口中,获取嵌入代码。主力雷达tdx源码
将获取的嵌入代码复制到网页源代码里,你可以定义excel表格放置的位置。
这样,我们就成功地将这个excel表格嵌入到了网页里。
如何在Web应用中添加一个JavaScript Excel查看器
在Web应用开发中,处理和展示Excel文件的需求很常见。本文将展示如何利用葡萄城公司的纯前端表格控件SpreadJS创建一个JavaScript Excel查看器。
项目结构包括HTML、JavaScript和CSS文件。首先,将SpreadJS添加到项目。apk源码怎么查看你可以选择两种方式:直接引入本地JS和CSS文件,或通过NPM安装。以下是NPM安装的示例:
在HTML部分,构建基本界面,包括文件选择按钮、输入框和样式化的UI元素:
在JavaScript的app.js文件中,初始化SpreadJS实例,处理文件导入,如导入密码保护的文件:
同样,导出Excel时也支持密码,添加相应的筹码主升源码事件处理程序:
为了保护数据,提供“保护工作簿”功能,用户可以通过按钮应用保护:
最后,测试程序,通过浏览器直接打开HTML文件,操作Excel文件的导入和导出:
完整源码可在Gitee获取。以上就是创建JavaScript Excel查看器的步骤,如有更多疑问,欢迎后台咨询获取产品文档和在线演示。
QRowTable表格控件-效率优化之-合理使用QStandardItem
在新工作中,我深入理解了Qt,发现代码性能问题。当我用QRowTable处理大量数据时,初始化速度缓慢。优化后,性能提升显著。本文将分析QRowTable性能问题的根源。
在使用QRowTable时,我尝试处理行数据,但界面加载时间过长,影响了用户体验。优化代码后,行数据的初始化仅需1-2秒。问题在于代码的编写方式,即如何设置QStandardItem数据。
通过Qt的帮助文档,我们了解了QStandardItem的功能:它用于存储单元格的各种信息,如文本、图标等,并支持子节点和兄弟节点。此对象并不是性能瓶颈。优化在于如何通过Model设置数据。
Qt源码显示,无论手动构造QStandardItem还是通过Model设置,内部都构造了QStandardItem对象。优化的关键在于Model如何管理数据,而非QStandardItem构造本身。为避免性能问题,应避免全量刷新,使用更精准的刷新策略。
QStandardItem在设置数据时,会触发多个信号。信号的触发导致性能问题,尤其是在大量数据处理时。分析这3个信号的作用,有助于理解QStandardItem的工作原理。优化QStandardItem的使用,避免不必要的刷新,可以显著提升性能。
在实际应用中,我们应遵循Qt的建议:避免频繁构造QStandardItem对象,而是通过Model高效管理数据。对于自定义item的情况,应谨慎考虑,尽量利用Qt提供的机制,避免性能瓶颈。
2024-12-23 06:20
2024-12-23 05:10
2024-12-23 05:05
2024-12-23 04:40
2024-12-23 04:14