我试图将数据从我的数据库(sqlite)链接到我的文本框,但我不确切知道如何......
这是我正在尝试的内容:
private void btnUpdate_Click(object sender, EventArgs e)
{
con.Open();
adapter = new SQLiteDataAdapter("SELECT PRECO_PRODUTO FROM INGREDIENTES WHERE NOME_PRODUTO='"+listProdutos.SelectedIndex+"'", con);
adapter.Fill(populate);
List<DataTable> precoIng = new List<DataTable>();
precoIng.Add(populate.Tables[0]);
con.Close();
tbPrecoProduto.Text = precoIng[0]; //error here
}
我想我需要一种方法将SQLiteDataTable转换为字符串?我是db的新手。 This is my table和this is my form design,如果有帮助......
答案 0 :(得分:1)
好像您正在尝试将TextBox的文本设置为DataTable。这没有多大意义,因为DataTable
类型与string
不同。您首先必须从表中提取数据:
var builder = new StringBuilder ();
foreach (var rowObject in precoIng [0].Rows)
{
var row = (DataRow) rowObject;
var id = row ["ID_PRODUTO"].ToString ();
var name = row ["NOME_PRODUTO"].ToString ();
var price = row ["PRECO_PRODUTO"].ToString ();
var count = row ["QNT_PRODUTO"].ToString ();
builder.AppendLine ($"Id: {id}; Name: {name}; Price: {price}; Count: {count}");
}
tbPrecoProduto.Text = builder.ToString ();
如果你只想要价格:
,你当然可以缩短这一点var builder = new StringBuilder ();
foreach (var rowObject in precoIng [0].Rows)
{
var row = (DataRow) rowObject;
var price = row ["PRECO_PRODUTO"].ToString ();
builder.AppendLine (price);
}
tbPrecoProduto.Text = builder.ToString ();
而且,顺便说一下,precoIng[0]
将始终与populate.Tables[0]
相同。
或者你可以写一个像这样的扩展方法:
public static string GetData (this DataTable table)
{
var builder = new StringBuilder ();
foreach (DataRow row in table.Rows)
foreach (DataColumn column in table.Columns)
builder.Append (column.ColumnName).Append (": ").Append (row [column]).Append ("; ");
return builder.ToString ();
}
然后调用precoIng[0].GetData()
将数据作为字符串。
如果您希望能够过滤数据以进行打印,您可以执行以下操作:
public static string GetData (this DataTable table, List <string> columns = null)
{
var builder = new StringBuilder ();
foreach (DataRow row in table.Rows)
if (columns == null)
foreach (DataColumn column in table.Columns)
builder.Append (column.ColumnName).Append (": ").Append (row [column]).Append ("; ");
else
foreach (var column in columns)
builder.Append (column).Append (": ").Append (row [column]).Append ("; ");
return builder.ToString ();
}
但我觉得你好像不希望整个表的数据作为字符串,而是希望数据是某些ID或某些东西。但是,为了帮助您,我需要更准确的信息。
好的,所以看起来你真正想要的是这样的东西:
var preco = precoIng.FirstOrDefault ()?.Rows.Cast <DataRow> ().FirstOrDefault ()? ["PRECO_PRODUTO"]?.ToString () ?? "";