C#用datagriview控件增加删除行数据,并且更新到xml中,求代码(急)如图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#用datagriview控件增加删除行数据,并且更新到xml中,求代码(急)如图相关的知识,希望对你有一定的参考价值。

完全按你的要求写的,供参考:

前提是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, 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>001</ID>

    <NAME>测一</NAME>

    <SEX>男男</SEX>

    <PHONE>13543234355</PHONE>

  </PERSON>

  <PERSON>

    <ID>002</ID>

    <NAME>再二</NAME>

    <SEX>女女</SEX>

    <PHONE>13245678903</PHONE>

  </PERSON>

  <PERSON>

    <ID>003</ID>

    <NAME>张三</NAME>

    <SEX>男男</SEX>

    <PHONE>13544678934</PHONE>

  </PERSON>

  <PERSON>

    <ID>005</ID>

    <NAME>王五</NAME>

    <SEX>女女</SEX>

    <PHONE>12345678900</PHONE>

  </PERSON>

</List>

参考技术A 您好,这个源码是我根据网上一个vb.net编辑xml文件的原理用c#重写的。除重用xml文件外.
并未重用任何代码!.
这小段代码,可对xml文件的记录进行删除,修改,或增加新记录。
利用了datagrid控件的sortcommand事件对xml里的记录进行排序。
email:ouyang76.263.net
------------------------------------------
< %@page language="c#" Trace="true"%>
<%@import namespace="System.Data"%>
<%@import namespace="System.IO"%>
<script language="c#" runat="server">
string xmlfile="books2.xml",xpath;
void page_load(Object obj,EventArgs e)

xpath=Server.MapPath(xmlfile);
if(!Page.IsPostBack)

Dataload("isbn");



void Dataload(string psort)

DataSet ds=new DataSet();
FileStream fs=new FileStream(xpath,FileMode.Open);
ds.ReadXml(fs);

if(ds.Tables.Count==0)

Response.Write("xml文件内无记录!!!!");
fs.Close();
Response.End();

Trace.Warn("表记录数",Convert.ToString(ds.Tables[0].Rows.Count));

DataRow dr=ds.Tables[0].NewRow();//新建一行
dr["ISBN"] = " Add ISBN";
ds.Tables[0].Rows.InsertAt(dr,0);//插入到第0行位置

Trace.Warn("表数目",Convert.ToString(ds.Tables.Count));//以红字显示调试信息

//grid1.DataSource=ds.Tables[0].DefaultView;
//grid1.DataBind();

DataView dv=new DataView(ds.Tables[0]);
Trace.Warn("字串长度:"+psort,Convert.ToString(psort.Length));//排序字符串的长度
if(psort.Length>0)
dv.Sort=psort;

grid1.DataSource=dv;
grid1.DataBind();
fs.Close();


void grid_sort(Object obj,DataGridSortCommandEventArgs e)

if(grid1.EditItemIndex==-1)
Dataload(e.SortExpression);
else
Response.Write("正在编辑暂不能排序!!");


void grid_edit(Object obj,DataGridCommandEventArgs e)

grid1.EditItemIndex=(int)e.Item.ItemIndex;
show_del("hide");
Dataload("");


void grid_cancel(Object obj,DataGridCommandEventArgs e)

grid1.EditItemIndex=-1;
show_del("show");
Dataload("");


void grid_update(Object obj,DataGridCommandEventArgs e)

int numcell=e.Item.Cells.Count;//单元格数目(e.Item是当前发生事件的表格行)
int currentrow=e.Item.DataSetIndex;
//int curr2=e.Item.ItemIndex;//与上句等价,可以不带(int)
Trace.Warn("当前更新行号 = ",Convert.ToString(currentrow));
//Trace.Warn("2当前更新行号 = ",Convert.ToString(curr2));

DataSet ds=new DataSet();
ds.ReadXml(xpath);//将xml模式和数据读取到dataSet;
DataRow dr;//表示DataTable中的一行信息.

if(currentrow==0)
dr=ds.Tables[0].NewRow();
else
dr=ds.Tables[0].Rows[e.Item.DataSetIndex - 1];

string[] str="isbn", "author", "title", "category", "comments";
int j=-1;
for(int i=2;i<numcell;i++)//跳过1和2column

j=j+1;
string ctext;
ctext=((TextBox)e.Item.Cells[i].Controls[0]).Text;

dr[str[j]] = ctext;
Trace.Warn(Convert.ToString(i)+str[j]+":每一行的文本",ctext);


if(currentrow==0)

Response.Write("加入新记录!!");
ds.Tables[0].Rows.InsertAt(dr,0);


ds.WriteXml(xpath);//将表示dataset的xml写入到xml文件中,包括数据和模式.
grid1.EditItemIndex = -1;//无此句仍在编辑界面
show_del("show");
Dataload("");


void show_del(string state)

string tmp=state;
switch(tmp)

case "show":
grid1.Columns[0].Visible = true;
break;
case "hide":
grid1.Columns[0].Visible = false;
break;
default:
grid1.Columns[0].Visible = true;
break;//也要带break


void initialize(Object obj,DataGridItemEventArgs e)//注意参数与其它函数不同

//e.Item.Cells[0].Text="aaaaa";//
if(e.Item.ItemIndex==0)//如果是第一行

LinkButton a0=new LinkButton();
a0=(LinkButton)e.Item.Cells[0].Controls[0];

LinkButton a1=new LinkButton();
a1=(LinkButton)e.Item.Cells[1].Controls[0];//在grid内建一个linkbutton控件

if(a0.Text=="删 除")
a0.Text="";
if(a1.Text=="编 辑")
a1.Text="[AddNew]";



void grid_del(Object obj,DataGridCommandEventArgs e)

Response.Write("XX");
Trace.Warn("正要删除",Convert.ToString(e.Item.ItemIndex));//控件中的行数
int curr=e.Item.ItemIndex;
DataSet ds=new DataSet();
ds.ReadXml(xpath);

DataRow dr=ds.Tables[0].Rows[curr-1];//有一行是新加的。
dr.Delete();//找到相应的数据行,将其删除
ds.WriteXml(xpath);

grid1.EditItemIndex = -1;
Dataload("");

</script>
<form runat="server">
<asp:datagrid id="grid1" runat="server"
alternatingitemstyle-backcolor="#eeeeee"
headerstyle-backcolor="lightyellow"
font-size="10pt"
allowsorting="true"
onsortcommand="grid_sort"
oneditcommand="grid_edit"
oncancelcommand="grid_cancel"
onupdatecommand="grid_update"
onitemcreated="initialize"
ondeletecommand="grid_del"
bordercolor="#999999"
>
<columns>
<asp:buttoncolumn text="删 除" commandname="delete"/>
<asp:editcommandcolumn buttontype="linkbutton" updatetext="更 新" canceltext="取 消" edittext="编 辑" headertext=""/>
</columns>
</asp:datagrid>
</form>
--------------------------------------------------------------------
xml文件(文件名:books2.xml)
<?xml version="1.0" standalone="yes"?>
<books>
<book>
<isbn>2e2e2we2we2</isbn>
<author>fefdw</author>
<title>2e2eef</title>
<category>324tg</category>
<comments>r3rrgeqw21</comments>
</book>
<book>
<isbn>1234345</isbn>
<author>ssdfdfe</author>
<title>fgregre</title>
<category>r4er43trt</category>
<comments>r3r3redqeq</comments>
</book>
<book>
<isbn>1234345</isbn>
<author>ssdfdfe</author>
<title>fgregre</title>
<category>r4er43trt</category>
<comments>r3r3redqeq</comments>
</book>
<book>
<isbn>0679757651</isbn>
<author>Tom Peters</author>
<title>Circle of Innovation</title>
<category>marketing</category>
<comments>His most recent book is his best by far!</comments>
</book>
<book>
<isbn>0884270610</isbn>
<author>Eli Goldthrait</author>
<title>The Goal</title>
<category>management</category>
<comments>Advocate of Theory of Constraints as applied to managment and optimization.</comments>
</book>
<book>
<isbn>068485600X</isbn>
<author>Jeff Cox, Howard Stevens</author>
<title>Selling the Wheel</title>
<category>management</category>
<comments>Excellent Treatise/Novel on the entire Sales Cycle</comments>
</book>
<book>
<isbn>0672316498</isbn>
<author>Alan Cooper</author>
<title>The Inmates Are Running The Asylum</title>
<category>management</category>
<comments>The father of Visual Basic and creator of the new art of Interaction Design - very valuable in designing websites. Basically the worlds most cutting edge thinker in User Interface design aimed at simplifying software use.</comments>
</book>
</books>本回答被提问者采纳

c# dataGridView对access数据库的增加 修改 删除

1.你要修改datagridview中的数据,必须给datagridview添加一个单击事件 就在datagridview中单击这个事件dataGridView1_CellContentClick就可以显示在你想要显示的控件中,一般为textbox

2.把修改后的datagridview放回数据库麻烦一点 下面sda为sqldataAdapter dt为datatable
最简单的就是用SqlocommandBuilder sqlcmdbuild=new SqlocommandBuilder(sda);
sqlcmdbuild.Update(dt);

如果不懂 我给你发一个源代码
参考技术A 帖代码?

以上是关于C#用datagriview控件增加删除行数据,并且更新到xml中,求代码(急)如图的主要内容,如果未能解决你的问题,请参考以下文章

c# dataGridView对access数据库的增加 修改 删除

C#中datagridview控件 如何进行删除修改添加数据并保存到数据库中

在c#中怎么删除datagridview里面的一条数据

C#语言中调用DataGridView控件增加和删除的触发事件方法

C# winform中dataGridView控件如何插入、删除、更新记录,操作完成后怎样写回数并保存据库,怎么写代码?

我想用C#中的datagrid控件做一个删除行(点击按钮删除datagrid中的所指定的任意一行)