导出adrain作为xml与元素

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
大家好,
我刚刚找到了这个论坛!期待检查这个地方。

我有一个DataGridView(未绑定),将成功导出为具有元素的XML。我想要;在DataGridView中运行XML,其中包含数据并将其视为单独的XML导入。基本上是下一行循环的代码。
查看代码示例。

try
{

foreach(DataGridView1.rows中的DataGridViewRow Row)

{



XMLWRitersettings设置= New XMLWRitersettings();
settings.indent = true;


//初始化XMLWRITER。
//将XMLWRT视为XMLWRITER = XMLWWRITER.CREATE("COMMODITY.xml", settings)
XMLWriter XMLWRT = XMLWriter.Create(exportloctxt.text,设置);
{
var withblock = xmlwrt;

//写下XML声明。
withblock.writestartdocument();

// 写个评论。
withblock.writecomment("史蒂文斯集装箱导入。 ischedul.");

//编写根元素。
withblock.writeStartElement("stevens");

//开始我们的第一人称。
withblock.writeStartElement("containers");


withblock.writeStartElement("container");

// The person nodes.



withblock.writeStartElement("code");
withblock.writeString(DataGridView1.CurrentRow.cells [0] .value.tostring());

// withblock.writeString(Row.cells [0] .value.tostring());
withblock.writeendeLement();



withblock.writeStartElement("name");
withblock.writeString(DataGridView1.CurrentRow.cells [1] .value.tostring());
// withblock.writeString(Row.cells [1] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("description");
withblock.writeString(DataGridView1.CurrentRow.cells [2] .value.tostring());
// withblock.writeString(Row.cells [2] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("tare");
withblock.writeString(DataGridView1.CurrentRow.cells [3] .value.tostring());
// withblock.writeString(Row.cells [3] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("type");
withblock.writeString(DataGridView1.CurrentRow.cells [5] .value.tostring());
// withblock.writeString(Row.Cells [5] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("group");
withblock.writeString(DataGridView1.CurrentRow.cells [4] .value.tostring());
// withblock.writeString(Row.cells [4] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("location");
withblock.writeString(DataGridView1.CurrentRow.cells [6] .value.tostring());
// withblock.writeString(Row.cells [6] .value.tostring());
withblock.writeendeLement();

//这个人的结尾。
withblock.writeendeLement();

withblock.writeendeLement();

//关闭XMLTextWriter。
withblock.writeenddocument();
withBlock.Close();
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
你能否在代码标签之间编辑你的帖子并重新粘贴你的代码,就像这个::

nd918n6.gif.


这样做有助于保持原始缩进以及使用颜色图例使得代码对我们更可读。
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
你能否在代码标签之间编辑你的帖子并重新粘贴你的代码,就像这个::

nd918n6.gif.


这样做有助于保持原始缩进以及使用颜色图例使得代码对我们更可读。

现在完成了。
道歉


C#:
尝试
{

foreach(DataGridView1.rows中的DataGridViewRow Row)

{



XMLWRitersettings设置= New XMLWRitersettings();
settings.indent = true;


//初始化XMLWRITER。
//将XMLWRT视为XMLWRITER = XMLWWRITER.CREATE("COMMODITY.xml", settings)
XMLWriter XMLWRT = XMLWriter.Create(exportloctxt.text,设置);
{
var withblock = xmlwrt;

// Write the Xml declaration.
withblock.writestartdocument();

// Write a comment.
withblock.writecomment("史蒂文斯集装箱导入。 ischedul.");

// Write the root element.
withblock.writeStartElement("stevens");

// Start our first person.
withblock.writeStartElement("containers");


withblock.writeStartElement("container");

// The person nodes.



withblock.writeStartElement("code");
withblock.writeString(DataGridView1.CurrentRow.cells [0] .value.tostring());

// withBlock.WriteString(row.Cells[0].Value.ToString());
withblock.writeendeLement();



withblock.writeStartElement("name");
withblock.writeString(DataGridView1.CurrentRow.cells [1] .value.tostring());
// withBlock.WriteString(row.Cells[1].Value.ToString());
withblock.writeendeLement();

withblock.writeStartElement("description");
withblock.writeString(DataGridView1.CurrentRow.cells [2] .value.tostring());
// withBlock.WriteString(row.Cells[2].Value.ToString());
withblock.writeendeLement();

withblock.writeStartElement("tare");
withblock.writeString(DataGridView1.CurrentRow.cells [3] .value.tostring());
// withBlock.WriteString(row.Cells[3].Value.ToString());
withblock.writeendeLement();

withblock.writeStartElement("type");
withblock.writeString(DataGridView1.CurrentRow.cells [5] .value.tostring());
// withblock.writeString(Row.Cells [5] .value.tostring());
withblock.writeendeLement();

withblock.writeStartElement("group");
withblock.writeString(DataGridView1.CurrentRow.cells [4] .value.tostring());
// withBlock.WriteString(row.Cells[4].Value.ToString());
withblock.writeendeLement();

withblock.writeStartElement("location");
withblock.writeString(DataGridView1.CurrentRow.cells [6] .value.tostring());
// withBlock.WriteString(row.Cells[6].Value.ToString());
withblock.writeendeLement();

// The end of this person.
withblock.writeendeLement();

withblock.writeendeLement();

// Close the XmlTextWriter.
withblock.writeenddocument();
withBlock.Close();
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
你已经做了或多或少地做了你想要的。您的Foreach循环从第4行开始,可能会在数据网格视图中的每一行中达到84。对于循环的每个迭代,您正在创建XML文件并写入它。我看到的唯一问题是您将写入同一个文件,因为在第16行时,您无法在线创建新的文件名作为目标。

至于为什么你想要多个XML文件,其中每个文件都是来自数据网格视图的行,我很难在我的脑海中调和,但这就是你所说的你想做的事情。

现在,如果您想要的真实只是一个输出文件XML文件,并且您希望在该单个文件中需要多行数据,那么您只需移动最初打开文件以进行编写的代码,并在外面创建根元素foreach循环,然后在循环中写出每行,写出一个人元素。

(除了旁边,使用XML序列化写出数据略有清洁的方法,但根据您的数据如何加载到数据网格视图中,可能不值得努力。)
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
嗨跳伞运动员。
谢谢你的回复伴侣。
它始终只导出一行。从阅读您的注释,只需一个包含在每个循环的根元素,循环中的一个XML都会更有意义,并在循环中写出每行和单个元素。
我从来没有用过那个
会发生什么是用户将Excel文件上传到DGV;填充数据;然后,他们单击导出,该导出将DGV带到XML中。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
The reasons why your current code is always writing out the same row over and over again is because you are using CurrentRow, and as I said earlier, you keep overwriting the same file.

如果用户粘贴到DGV中,XML序列化可能不会值得它。

一个方法来修剪您启动元素的位置的代码,写一个值,然后立即关闭元素将要使用WriteElementString()以便您可以更改:
C#:
withblock.writeStartElement("tare");
withBlock.WriteString(row.Cells[3].Value.ToString());
withblock.writeendeLement();

C#:
withBlock.WriteElementString("tare", row.Cells[3].Value.ToString());


甚至进一步修剪您的代码,如果是DGV列 名称 财产(不是 标题文本 属性)匹配您可以执行以下操作的XML元素名称:
C#:
var containerElementNames = new string [] { "code", "name", "description", "tare", "type", "group", "location" };
foreach (string name in containerElementNames)
    withBlock.WriteElementString(name, row.Cells[name].Value.ToString());
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
嗨跳伞运动员。
谢谢你再回复我

我试过了

C#:
withBlock.WriteElementString("tare", row.Cells[3].Value.ToString());

我现在收到这个错误

system.nullreferenceException:'对象引用未设置为对象的实例。

这是因为它认为小区是空吗?

谢谢
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我的签名中有一个调试器链接。如果您不熟悉调试,我建议阅读它。在错误的情况下放置休息点,当它破坏鼠标悬停在它上面并检查哪个或者如果它是null,并且处理您希望如何处理它。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
如果您使用的是Visual Studio,可以将每个零件悬停在其中,发现异常抛出时是null的。

If you have that code within the foreach(DataGridView1.rows中的DataGridViewRow Row), then shouldn't be null. (As far as I know it follows the modern C# approach of not returning a null within a collection, unlike older .NET Framework 1.1 and 2.0.

If you have at least 4 columns, then Row.Cells.[3] shouldn't be null.

Most likely Row.Cells.[3].Value is null.
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
嗨,大家好
请再次查看我所做的更改。例外错误是这样

"system.nullreferenceException:'对象引用未设置为对象的实例。

system.windows.forms.datagridviewcell.value.get返回的null。"

代码示例:

Example:
            {
                //if (row.Cells[0].Value == null || row.Cells[0].Value == DBNull.Value) return;
                //  try
                {




                    {

                        foreach(DataGridView1.rows中的DataGridViewRow Row)
                        {

                            XMLWRitersettings设置= New XMLWRitersettings();
                        settings.indent = true;


                        //初始化XMLWRITER。
                        //将XMLWRT视为XMLWRITER = XMLWWRITER.CREATE("COMMODITY.xml", settings)
                        XMLWriter XMLWRT = XMLWriter.Create(exportloctxt.text,设置);
                        {
                            var withblock = xmlwrt;

                            //写下XML声明。
                            withblock.writestartdocument();

                            //   写个评论。
                            withblock.writecomment("史蒂文斯集装箱导入。 ischedul.");

                            //编写根元素。
                            withblock.writeStartElement("stevens");

                            //开始我们的第一人称。
                            withblock.writeStartElement("containers");


                            withblock.writeStartElement("container");

                                // The person nodes.


                                var containerElementNames = new string[] { "code", "name", "description", "tare", "type", "group", "location" };
                                foreach (string name in containerElementNames)


                                withBlock.WriteElementString("code", row.Cells[0].Value.ToString());
                                //  withblock.writeStartElement("code");
                                //withBlock.WriteString(dataGridView1.CurrentRow.Cells[0].Value.ToString());
                                //     withBlock.WriteString(row.Cells[0].Value.ToString());
                              //withBlock.WriteEndElement();



                          
                                    withBlock.WriteElementString("name", row.Cells[1].Value.ToString());
                                //  withblock.writeStartElement("name");
                                // withblock.writeString(DataGridView1.CurrentRow.cells [1] .value.tostring());
                                // withblock.writeString(Row.cells [1] .value.tostring());
                            //  withblock.writeendeLement();


                                withBlock.WriteElementString("description", row.Cells[2].Value.ToString());
                                // withblock.writeStartElement("description");
                              //withBlock.WriteString(dataGridView1.CurrentRow.Cells[2].Value.ToString());
                                    //   withBlock.WriteString(row.Cells[2].Value.ToString());
                               //   withblock.writeendeLement();

                                withBlock.WriteElementString("tare", row.Cells[3].Value.ToString());
                              //withBlock.WriteStartElement("tare");
                                //  withblock.writeString(DataGridView1.CurrentRow.cells [3] .value.tostring());
                                    //  withBlock.WriteString(row.Cells[3].Value.ToString());
                               // withblock.writeendeLement();

                                //  withblock.writeStartElement("type");
                                withBlock.WriteElementString("type", row.Cells[5].Value.ToString());
                           //   withblock.writeString(DataGridView1.CurrentRow.cells [5] .value.tostring());
                                    // withblock.writeString(Row.Cells [5] .value.tostring());
                              //    withblock.writeendeLement();

                                withBlock.WriteElementString("group", row.Cells[4].Value.ToString());
                              //withBlock.WriteStartElement("group");
                                 // withblock.writeString(DataGridView1.CurrentRow.cells [4] .value.tostring());
                                    //  withBlock.WriteString(row.Cells[4].Value.ToString());
                               //   withblock.writeendeLement();

                                withBlock.WriteElementString("location", row.Cells[6].Value.ToString());
                             // withblock.writeStartElement("location");
                                //  withblock.writeString(DataGridView1.CurrentRow.cells [6] .value.tostring());
                                    // withBlock.WriteString(row.Cells[6].Value.ToString());
                                //  withblock.writeendeLement();

                                    //这个人的结尾。
                                    withblock.writeendeLement();

                                    withblock.writeendeLement();

                                    //关闭XMLTextWriter。
                                    withblock.writeenddocument();
                                    withBlock.Close();
                                
                            }

                        }

                        {



                            TimerTxt.Text = "Export Successful";

                        }
                    }
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
再次,我们告诉您使用您的调试器。检查变量的值:

Row.Cells [0]
Row.Cells [0] .Value
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
介绍一些有条件的逻辑来检查这些
Row.Cells..Value!= null
Row.Cells..Value!= dbnull.value
您可能希望在单元格值上检查string.isnullorWhiteSpace。
在第45行,运行一些检查,看看它们是否没有null,然后处理它们,否则跳过它们或处理空值。

再次,请参阅第8和第9柱上获得的指导。
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
嗨,大家好
如果我有"允许用户添加行"=禁用,然后没有错误,它导出文件;只是元素中的空白数据..>.< argh.
我允许用户重新添加行,放在相关线路上。

578
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我不知道我的文本在最后一篇文章中格式化了,显然是由于我缺乏代码标签......但它仍然很清楚你被告知要做什么。您在尝试使用它们之前,请在检查迭代的值的语句时如何努力?如果您有空值,则需要处理它。如果没有先检查价值类型是什么,你就不能这样做。你的代码也可以简化,但如果你也不愿意,我不想放进努力。

if (row.Cells[i].Value != null || row.Cells[i].Value!= dbnull.value etc etc check for more conditions as outlined on my last post)

从xmlwriter代码的开头到XMLWRITER结束支架的末尾}应该有上面的语句。请努力,我们都喜欢看一些努力。上面的线将阻止正在处理的空。我相信你知道如何编写陈述以及他们如何工作?如果没有,我的签名中有一个有用的链接,以获得其文档。

If i have "允许用户添加行"=禁用,然后没有错误,它导出文件;只是空白数据

没有人建议你这样做。但是你可以按照建议或别的斗争。
 

Tdignan87.

众所周知的成员
加入
2019年7月8日
消息
95
编程经验
Beginner
抱歉,不是我不努力;我正在学习并尽力而为。我会到达那里.....
是的,我熟悉书面陈述。
我会给那个bash;并更新我的调查结果。

谢谢你对这个新手的耐心!
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,161
地点
挪威
编程经验
10+
If i have "允许用户添加行"=禁用然后没有错误
排除"new row"行您可以检查row.isnewrow。

如果一个单元格.Value可以为null,您无法直接执行.tostring,null.tostring将导致NullReferenceException。一个选择是使用 null条件运算符 like this value?.ToString(), this will return null if the value is null and that is ok to use as input for WriteElementString, or else the value as string. Another could be to convert using Convert.ToString method instead.
 
最佳 底部