Как перенести данные из SQLiteDataTable в TextBox - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь связать данные из моей базы данных (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 в строку?Я новичок в материалах БД. Это моя таблица и Это моя форма дизайна , если поможет ...

1 Ответ

0 голосов
/ 20 мая 2018

Кажется, что вы пытаетесь установить текст 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 ();
}

Однако я чувствую, что вы неЯ не хочу, чтобы данные всей вашей таблицы были представлены в виде строки, а нужно, чтобы данные имели определенные идентификаторы или что-то в этом роде.Однако, чтобы помочь вам в этом, мне понадобится более точная информация.


Хорошо, так что кажется, что вы действительно хотите что-то вроде этого:

var preco = precoIng.FirstOrDefault ()?.Rows.Cast <DataRow> ().FirstOrDefault ()? ["PRECO_PRODUTO"]?.ToString () ?? "";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...