C#怎么对已有dataset.tablesce 能自动填充效果

茗香淡然 2014-04-03 08:50:59


private void dsta()
{
string setpaths = "terminal.xml"; ///文件名
System.Data.DataSet ds = new System.Data.DataSet("SysString");
System.Data.DataTable dt = new System.Data.DataTable("toTable");

DataColumn intIdColumn = new DataColumn();
intIdColumn.DataType = System.Type.GetType("System.Int32");
intIdColumn.ColumnName = "ID";
intIdColumn.AutoIncrementSeed = 1;
intIdColumn.AutoIncrement = true;
dt.Columns.Add(intIdColumn);

dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Sex", typeof(string));
dt.Columns.Add("Age", typeof(Int32));

DataColumn boolColumn = new DataColumn();
boolColumn.DataType = System.Type.GetType("System.Boolean");
boolColumn.ColumnName = "真假";
boolColumn.DefaultValue = "false";
dt.Columns.Add(boolColumn);

XmlDocument xmldoc = new XmlDocument();
try
{
xmldoc.Load(setpaths);
XmlNode node = xmldoc.SelectSingleNode("SysString");
if (node != null)
foreach (XmlNode xnode in xmldoc.SelectNodes("SysString/toTable"))
{
DataRow row1 = dt.NewRow();
foreach (XmlNode xcnode in xnode.ChildNodes)
{
row1[xcnode.Name] = xcnode.InnerText;
}
dt.Rows.Add(row1);
ds.Tables.Add(dt);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
try
{
System.Data.DataRow row = dt.NewRow();
row["Name"] = "kimi";
row["Sex"] = "male";
row["Age"] = "20";
dt.Rows.Add(row);
ds.Tables.Add(dt);
dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception exo) {MessageBox.Show(exo.ToString()); }
ds.WriteXml(setpaths,XmlWriteMode.IgnoreSchema);
}

上面得到的是三行数据结果。
下面这里注释掉的话,tables 就只剩下重新开的一行,其他的都会抹掉。dataGridView 可以显示出来,还原就出错不再显示。

XmlDocument xmldoc = new XmlDocument();
try
{
xmldoc.Load(setpaths);
XmlNode node = xmldoc.SelectSingleNode("SysString");
if (node != null)
///读取<centerInfo>的节点
foreach (XmlNode xnode in xmldoc.SelectNodes("SysString/toTable"))
{
DataRow row1 = dt.NewRow();
foreach (XmlNode xcnode in xnode.ChildNodes)
{
row1[xcnode.Name] = xcnode.InnerText;
}
dt.Rows.Add(row1);
ds.Tables.Add(dt);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

下面这句和上面的互换的话会出现不同效果,一个是两行,一个是三行,dataGridView都不能显示。

try
{
System.Data.DataRow row = dt.NewRow();
row["Name"] = "kimi";
row["Sex"] = "male";
row["Age"] = "20";
dt.Rows.Add(row);
ds.Tables.Add(dt);
dataGridView1.DataSource = ds.Tables[0];
}

怎么把已有文档读入datatable,能使datatable 有默认值等效果。
如 "ID" 列自动递增值,“真假”列自动填 ‘false’。
分不多,没多少分了,o(︶︿︶)o~唉!!!
...全文
229 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
茗香淡然 2014-04-13
  • 打赏
  • 举报
回复
哈哈,好几天没上了,突然想起还有提问没来看看什么情况呢!, 斑竹辛苦了,大晚上还给解答了... 真是一个位置之差啊!!

            try
            {
                System.Data.DataRow row = dt.NewRow();
                row["Name"] = "kimi";
                row["Sex"] = "male"; 
                row["Age"] = "20"; 
                dt.Rows.Add(row);
                ds.Tables.Add(dt);
                dataGridView1.DataSource = ds.Tables[0];
            }
                ds.Tables.Add(dt); 
这句还真是害我不浅, 我说怎么老是提错...害得我茫然好几天...咔嚓就行了,嘿嘿!!! 真假这个限定 列名就可以了,不限定就报错!! 谢谢斑竹的提醒!!!
threenewbee 2014-04-09
  • 打赏
  • 举报
回复
真假那个你加个判断就可以了。
threenewbee 2014-04-09
  • 打赏
  • 举报
回复
if (node != null) { ///读取<centerInfo>的节点 foreach (XmlNode xnode in xmldoc.SelectNodes("SysString/toTable")) { DataRow row1 = dt.NewRow(); foreach (XmlNode xcnode in xnode.ChildNodes) { row1[xcnode.Name] = xcnode.InnerText; } dt.Rows.Add(row1); } ds.Tables.Add(dt); }
茗香淡然 2014-04-09
  • 打赏
  • 举报
回复
没个人解答呢
茗香淡然 2014-04-08
  • 打赏
  • 举报
回复
"真假"列<Boolean>类型,用 Convert.ToBoolean 得到的是单元格中的Boolean值,还是得到单元格中的值是否为Boolean值?
茗香淡然 2014-04-03
  • 打赏
  • 举报
回复
忘了上图了:

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧