我尝试建立一个if语句来检查是否已经创建了一个表。我只想创建一个表,但现在我每次单击按钮存储信息时都会创建一个表。有什么建议?
DataTable dt;
private void InitDataTable()
{
if () {
}
dt = new DataTable();
DataSet ds = new DataSet();
ds.ReadXml("gjesteInfo.xml");
ds.Tables.Add(dt);
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}
private void lagre_Click(object sender, EventArgs e)
{
InitDataTable();
gjesterutenrom.Items.Add(gjestenavnInput.Text);
gjestenavnInput.Text = "";
datoInnsjekk.Text = "";
antallDager.Text = "";
DataSet onClick = new DataSet();
onClick.ReadXml("gjesteInfo.xml");
lagredeGjester.DataSource = onClick.Tables[0];
}
我尝试使用名为lagredeGjester的DataGridView获取存储在XLM中的信息。
更新的问题:
现在我写了这样的代码:
DataTable dt;
DataSet ds = new DataSet();
private void InitDataTable()
{
if( ds.Tables.Contains("Gjester") )
{
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}
else {
dt = new DataTable("Gjester");
ds.ReadXml("gjesteInfo.xml");
ds.Tables.Add(dt);
DataColumn dc1 = new DataColumn("Fullt navn");
DataColumn dc2 = new DataColumn("Start dato");
DataColumn dc3 = new DataColumn("Antall dager");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);
ds.Merge(dt);
ds.WriteXml("gjesteInfo.xml");
}
}
在我第一次跑步时,我输入了两个不同的信息并按下了我的按钮。两个信息都在我想要的同一个表中。但我似乎无法正确地写出我的if语句。当我运行上面的代码时,它使用一个空XML(没有表),但只要创建“Gjester”表,它就会说“一个名为'Gjester'的DataTable已经属于这个DataSet。”但这不是我的if语句应该阻止的吗?正如我现在写的那样,它不仅应该添加信息而不是尝试创建新表吗?
答案 0 :(得分:10)
可以通过检查:
if(ds.Tables.Contains("tablename"))
OR
if(dt.Rows.Count == 0)
OR
int flag=0;
try
{
if(ds.Tables["tablename"].Rows.Count>0)
{
// execute something
}
}
catch(Exception ex)
{
flag=1;
}
if(flag==1)
{
messagebox.show("Table does not exists");
}
答案 1 :(得分:3)
一种可能的解决方案是定义函数的DataSet
。然后检查数据集中的表数。
DataSet ds = new DataSet();
private void InitDataTable()
{
DataTable dt;
if(ds.Tables.Count > 0 )
{
dt = ds.Tables[0];
}
dt = new DataTable();
//your code
}
答案 2 :(得分:2)
您还可以扩展DataSet以添加方法FetchOrCreate()
public static DataTable FetchOrCreate(this DataSet ds, string tableName)
{
if (ds.Tables.Contains(tableName))
return ds.Tables[tableName];
// -------------------------------
var dt = new Datatable(tableName);
ds.Tables.Add(dt);
return dt;
}