C# 如何将数据从SQLiteDataTable传输到文本框

C# 如何将数据从SQLiteDataTable传输到文本框,c#,forms,sqlite,C#,Forms,Sqlite,我正在尝试将数据从我的db(sqlite)链接到我的文本框,但我不知道具体如何 以下是我正在尝试的: private void btnUpdate_Click(object sender, EventArgs e) { con.Open(); adapter = new SQLiteDataAdapter("SELECT PRECO_PRODUTO FROM INGREDIENTES WHERE NOME_PRODUTO='"+listProdutos.

我正在尝试将数据从我的db(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
    }    
private void b更新\u单击(对象发送者,事件参数e)
{
con.Open();
adapter=new SQLiteDataAdapter(“从Ingreditentes中选择PRECO_PRODUTO,其中NOME_PRODUTO='”+列表PRODUTO.SelectedIndex+”,con);
适配器。填充(填充);
列表预编码=新列表();
预编码.Add(填充.Tables[0]);
con.Close();
tbprecproduto.Text=预编码[0];//此处出错
}    

我想我需要一种将SQLiteDataTable转换为字符串的方法?我是db的新手。而且,如果有帮助的话…

似乎您正在尝试将文本框的文本设置为数据表。这没有什么意义,因为类型
DataTable
字符串不同。您首先必须像这样从表中提取数据:

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 ();
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 ();
}
当然,如果您只需要以下价格,您可以缩短此时间:

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]
相同

或者,您可以编写如下扩展方法:

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 ();
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 ();
}
然后调用
预编码[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 ();
}
var preco = precoIng.FirstOrDefault ()?.Rows.Cast <DataRow> ().FirstOrDefault ()? ["PRECO_PRODUTO"]?.ToString () ?? "";
public静态字符串GetData(此DataTable,List columns=null)
{
var builder=newstringbuilder();
foreach(table.Rows中的DataRow行)
如果(列==null)
foreach(table.Columns中的DataColumn列)
builder.Append(column.ColumnName).Append(“:”).Append(row[column]).Append(;”);
其他的
foreach(列中的var列)
builder.Append(column.Append(“:”).Append(row[column]).Append(;”);
返回builder.ToString();
}
但是,我确实觉得您不希望整个表的数据是一个字符串,而是希望数据是特定的ID或其他内容。然而,为了帮助你,我需要更精确的信息


好吧,看来你真正想要的是这样的:

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 ();
}
var preco = precoIng.FirstOrDefault ()?.Rows.Cast <DataRow> ().FirstOrDefault ()? ["PRECO_PRODUTO"]?.ToString () ?? "";
var preco=precoIng.FirstOrDefault()?.Rows.Cast().FirstOrDefault()?[“PRECO_PRODUTO”]??"";

出现了什么错误?“无法将类型“System.Data.DataTable”隐式转换为“string”。如果我执行tbprecproduto.Text=Convert.ToString(预编码[0]);它只是在我的文本框上打印“table”
NOME\u PRODUTO
不应该是一个名字吗?因为我假设
listProdutos.SelectedIndex
是一个整数,不是吗?是的。。我做了“listProdutos.SelectedIndex”,这样查询就可以捕获与用户选择的产品相关的数据。是的,你是对的。当我写去删除查询的时候,我正在考虑这个问题,我忘记了这个细节哈哈。现在工作:)谢谢!!洛洛尔:多好的回答,谢谢,哈哈。赞成!实际上,我的目的是将所有关于“NOME_PRODUTO”的信息移动到我的文本框中。分别将NOME_PRODUTO设置为第一个文本框,将PRECO_PRODUTO设置为第二个文本框,将QNT_PRODUTO设置为最后一个文本框。我完成了第二个代码块的实现,但它什么也不返回(“”)。。。你能帮我吗?也许我还是做错了什么。Print()@IgorHenriques你能告诉我
precoIng[0].Rows.Count
string.Join(“;”,precoIng[0].Rows[0].ItemArray)的值吗?我知道-它包含任何东西都很奇怪。
listProdutos.SelectedIndex
的示例值是什么?