【问题标题】:Getting SQLite data in gridview (C#) is not working在 gridview (C#) 中获取 SQLite 数据不起作用
【发布时间】:2018-08-08 20:29:37
【问题描述】:

我有一个 SQLite 数据库,其中包含数据。我想在我的 asp.NET 网页上的 GridView 列表中显示这些数据。 我找到了一种方法here,但这对我不起作用。我想要在 gridview 列表中显示我的表格的前三列。

所以我想在“wood”、“vertaling”和“gebruiker”列中显示数据。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Scripts_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnTest_Click(object sender, EventArgs e)
    {

        string connectionString =
         @"Data Source=C:/Users/elias/Documents/Visual Studio 2017/WebSites/WebSite7/App_Data/overhoren.db";

        using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
        {
            conn.Open();

            using (var command = new System.Data.SQLite.SQLiteCommand(conn))
            {
                command.Connection = conn;

                command.CommandText =
                   @"SELECT[vertaling], [woord] FROM[tbWoorden] WHERE[woord] = 'ans'";



                using (var reader = command.ExecuteReader())
                {
                    string test = "";

                    if (reader.Read())
                        dataGridView1.Rows.Add(new object[] {
                            read.GetValue(read.GetOrdinal("woord")),  // Or column name like this
                            read.GetValue(read.GetOrdinal("vertaling")),
                            read.GetValue(read.GetOrdinal("gebruiker"))
                        });

                }
            }

        }
    }



    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void grdMijnLijsten_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}

这对我不起作用。我认为我做错了什么,但我在网上搜索了很多,找不到解决问题的方法。

我该怎么办?

谢谢,

埃利亚斯

【问题讨论】:

  • 一方面,您只选择两列。
  • 如果您正在寻找示例,请确保它们是 asp.net。您发布的链接指向一个 winforms 示例。
  • @Crowcoder 我发现的所有其他东西都不适用于 SQLite
  • 示例可能不是SQLite,但你使用的数据库无所谓。所有 .net 提供程序都实现相同的接口。只需将他们的 SqlCommand (例如)替换为 SQLiteCommand 等。

标签: c# asp.net sqlite gridview datagridview


【解决方案1】:

您忘记在SELECT 命令中指定列gebruiker

要获取大量数据,您需要使用while 循环。

顺序值应该在循环之前获取一次。

command.CommandText =
    @"SELECT [vertaling], [woord], [gebruiker]
      FROM [tbWoorden]
      WHERE [woord] = 'ans'";


using (var reader = command.ExecuteReader())
{
    int woordIndex = reader.GetOrdinal("woord");
    int vertalingIndex = reader.GetOrdinal("vertaling");
    int gebruikerIndex = reader.GetOrdinal("gebruiker");

    while (reader.Read())
        dataGridView1.Rows.Add(new object[] {
            reader.GetValue(woordIndex),
            reader.GetValue(vertalingIndex),
            reader.GetValue(gebruikerIndex)
        });
}

【讨论】:

  • 感谢您的快速回复。它几乎可以工作,但它给出了这个错误:GridViewRowCollection' does not contain a definition for 'Add' and no extension method 'Add'
  • @ielaajez,这又是因为这是一个 asp.net 网格,而不是一个 winforms 网格。如果你打算对网格做任何有趣的事情,无论如何你都应该使用数据绑定。 Check this out
  • @Crowcoder 谢谢你,那篇文章真的很有帮助!
【解决方案2】:

你可以使用这个功能。

  private static DataTable ReadSqliteTable(string DBfile, string tableName,string wherestatement = "")
    {
        try
        {
            using (var conn = new SQLiteConnection("Data Source=" + DBfile))
            {
                if (conn.State != ConnectionState.Open) conn.Open();
                SQLiteDataAdapter sQLiteData = new SQLiteDataAdapter("SELECT * FROM " + tableName + wherestatement, conn);
                DataTable table = new DataTable(tableName);
                sQLiteData.Fill(table);
                return table;
            }
        }
        catch { return null; };           
    }

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多