如何将数据从SQLiteDataTable传输到TextBox

时间:2018-05-19 22:19:07

标签: c# forms sqlite

我试图将数据从我的数据库(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 tablethis is my form design,如果有帮助......

1 个答案:

答案 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 () ?? "";