我想以编程方式在datagridview中添加列和sql查询

d8tt03nd  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(350)

现在我在win form桌面应用程序上工作,问题是我的sql表中有9列,我想按数据表显示7列,但我想以编程方式添加2列,就像每个银行都有金额一样,所以我想以编程方式创建银行列,并想在该列中添加金额请查看我添加列的图像在数据网格视图中编程,但我不知道如何在该列中添加每个银行的金额

string sqlCust2 = "select Dates,Rec,Name,Catt,Unit,Block,Chq,cBank from payment";
            DataAccess.ExecuteSQL(sqlCust2);
            DataTable dtCust2 = DataAccess.GetDataTable(sqlCust2);
            dataGridView1.DataSource = dtCust2;
            string sqlCust3 = "select DISTINCT Bank,Amount from payment";
            DataAccess.ExecuteSQL(sqlCust3);
            DataTable dtCust3 = DataAccess.GetDataTable(sqlCust3);
            int A = Convert.ToInt32(dtCust3.Rows.Count);
            for (int i = 0; i < dtCust3.Rows.Count; ++i)
            {
                dataGridView1.Columns.Add(dtCust3.Rows[i][0].ToString(), dtCust3.Rows[i][0].ToString());

            }
gk7wooem

gk7wooem1#

我的sql表中有9列,我想按数据表显示7列,但我想以编程方式添加2列
让我们把这个问题分成几个小问题。显然,您有一些查询返回某个类的类似对象的序列。您希望显示此查询的某些属性,但不是全部,甚至希望显示查询未返回的零个或多个属性。
从数据库获取的数据:

class DatabaseRow
{
    public int A {get; set;}
    public string B {get; set;}
    public DateTime C {get; set;}
    public int D {get; set;}
    public DateTime E {get; set;}
    public int F {get; set;}
}

您的datagridview显示的几乎相同:

class DataGridViewRow
{
    public int A {get; set;}
    public DateTime C {get; set;}
    public int D {get; set;}
    public DateTime E {get; set;}

    public int G {get; set;}
    public int H {get; set;}
}

所以列a,c,d,e被显示,但不是b和f,它也显示g和h。
显然,您需要将databaserows转换为datagridviewrows的方法。让我们把它作为扩展方法来做。请参阅扩展方法。
不知何故,你需要g和h的新值。我不知道你从哪里得到它们,假设你从某处得到它们,或者使用默认值:

public static DataGridViewRow ToDataGridViewRow(this DataBaseRow databaseRow)
{
    return databaseRow.ToDataGridViewRow(0, 0);
}

public static DataGridViewRow ToDataGridViewRow(
     this DataBaseRow databaseRow,
     int g,
     int h)
{
    return new DataGridViewRow
    {
         A = databaseRow.A,
         C = databaseRow.C,
         ...
         G = g,
         H = h,
    };

以及转换序列的方法:

public static IEnumerable<DataGridViewRow> ToDataGridViewRows(
    this IEnumerable<DataBaseRow> databaseRows)
{
    return databaseRosw.Select(databaseRow => databaseRow.ToDataGridViewRow();
}

datagridview包含列和数据源:

DataGridView dvg = new DataGridView();
DataGridViewColumn columnA = new DataGridViewColumn() {...}
DataGridViewColumn columnC = new DataGridViewColumn() {...}
...

dvg.Columns.Add(columnA);
dvg.Columns.Add(columnB);
...

IEnumerable<DatabaseRow> fetchedData = ...
IEnumerable<DataGridViewRow> dataToShow = fetchedData.ToDataGridViewRows();

BindingList<DataGridViewRow> bindingList = new Bindingist<DataGridViewRow>(dataToShow.ToList());
this.dbg.DataSource = bindingList();

普雷斯托:你的数据显示出来了。
顺便说一下,如果要对显示的数据进行排序或筛选,请考虑使用nuget包equin.applicationframework.bindinglistview

var bindingList = new BindingListView<DataGridView>(dataToShow.ToList());
this.dgv.DataSource = bindingList;

突然,您的数据可以通过单击列标题进行排序。它甚至还显示了一个显示排序顺序的glyph。
要筛选显示的数据,而不将其从bindinglist中删除,请执行以下操作:

var customerView = new BindingListView<Customer>(...);
this.dgv.DataSource = customerView;

// show only New Your customers:
customerView.ApplyFilter( customer => customer.City == "New York");

相关问题