【问题标题】:How to get column values of a new added column with SELECT command如何使用 SELECT 命令获取新添加列的列值
【发布时间】:2018-06-20 23:59:57
【问题描述】:

我使用 Windows 窗体创建了一个客户订单。客户可以使用其 ID 登录。一旦他登录,DataGridView 就会显示文章表,其中包含哪些文章可用并准备订购的信息。数据来自 SQL 数据库。您可以在下面查看创建表格的方法以及表格的外观。如您所见,在将数据加载到表中后,我在表中添加了一个附加列(“Bestellmenge”),这是客户想要订购的文章数量。金额将由客户输入。 在他输入他想要订购的文章的数量并单击表单上的订购按钮后,我希望 DataGridView 只显示一个包含他订购的文章的表格,其中包含文章 ID、名称、订购数量、价格和全面价格(每篇文章)。要计算全面价格,我需要件数和价格。但是,订购的金额不是 SQL 数据库中表的一部分,它是使用附加列创建的。我的问题是,是否有可能使用 SQL SELECT 命令来获取金额并计算全面价格?

    private string tableName = "Artikel";
    private bool update = false;

    DataGridTableStyle dgTabStyle = new DataGridTableStyle();
    string sqlCmd = "SELECT * FROM artikel";

    private void ArtikelLaden()
    {
        DataTable thisTable = dataSet.Tables[tableName];
        if (thisTable != null)
        {
            thisTable.Clear();
        }


        try
        {
            odbcDataAdapter.SelectCommand = new OdbcCommand(sqlCmd, odbcConnection);
            odbcDataAdapter.Fill(dataSet, tableName);
            dataGrid.SetDataBinding(dataSet, tableName);
            if (!update)
            {
                //Neue Spalte Bestellmenge hinzufügen:
                dataSet.Tables[tableName].Columns.Add("bestellmenge");

                dgTabStyle.MappingName = tableName;

                DataGridTextBoxColumn dgtCol1 = new DataGridTextBoxColumn();
                dgtCol1.MappingName = "id";
                dgtCol1.ReadOnly = true;
                dgtCol1.HeaderText = "Artikel-ID";
                DataGridTextBoxColumn dgtCol2 = new DataGridTextBoxColumn();
                dgtCol2.MappingName = "name";
                dgtCol2.ReadOnly = true;
                dgtCol2.HeaderText = "Artikel";
                dgtCol2.Width = 100;
                DataGridTextBoxColumn dgtCol3 = new DataGridTextBoxColumn();
                dgtCol3.MappingName = "beschreibung";
                dgtCol3.ReadOnly = true;
                dgtCol3.HeaderText = "Beschreibung";
                dgtCol3.Width = 100;
                DataGridTextBoxColumn dgtCol4 = new DataGridTextBoxColumn();
                dgtCol4.MappingName = "groesse";
                dgtCol4.ReadOnly = true;
                dgtCol4.HeaderText = "Größe";
                DataGridTextBoxColumn dgtCol5 = new DataGridTextBoxColumn();
                dgtCol5.MappingName = "farbe";
                dgtCol5.ReadOnly = true;
                dgtCol5.HeaderText = "Farbe";
                DataGridTextBoxColumn dgtCol6 = new DataGridTextBoxColumn();
                dgtCol6.MappingName = "preis";
                dgtCol6.Format = "c";
                dgtCol6.Alignment = HorizontalAlignment.Center;
                dgtCol6.ReadOnly = true;
                dgtCol6.HeaderText = "Preis";
                DataGridTextBoxColumn dgtCol7 = new DataGridTextBoxColumn();
                dgtCol7.MappingName = "menge";
                dgtCol7.Alignment = HorizontalAlignment.Center;
                dgtCol7.ReadOnly = true;
                dgtCol7.HeaderText = "lieferbar";
                DataGridTextBoxColumn dgtCol8 = new DataGridTextBoxColumn();
                dgtCol8.MappingName = "bestellmenge";
                dgtCol8.NullText = "";
                dgtCol8.Alignment = HorizontalAlignment.Center;
                dgtCol8.HeaderText = "Bestellmenge";
                dgtCol8.Width = 100;


                dgTabStyle.GridColumnStyles.Add(dgtCol1);
                dgTabStyle.GridColumnStyles.Add(dgtCol2);
                dgTabStyle.GridColumnStyles.Add(dgtCol3);
                dgTabStyle.GridColumnStyles.Add(dgtCol4);
                dgTabStyle.GridColumnStyles.Add(dgtCol5);
                dgTabStyle.GridColumnStyles.Add(dgtCol6);
                dgTabStyle.GridColumnStyles.Add(dgtCol7);
                dgTabStyle.GridColumnStyles.Add(dgtCol8);
                dataGrid.TableStyles.Add(dgTabStyle);

                update = true;
                // default-Button ändern:
                this.AcceptButton = this.buttonBestellen;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.GetType() + Environment.NewLine + ex.Message);
        }
    }

【问题讨论】:

    标签: c# sql select datagridview datatable


    【解决方案1】:

    您是否在询问如何在 select 语句中计算 2 列的乘积,例如

    | quantity| price|
    |---------|------|
    | 2       | 4    |
    | 5       | 8    |
    | 7       | 1    |
    

    SELECT 数量、价格、value1 * value2 AS total FROM 示例;

    | quantity | price  | total |
    |----------|--------|-------|
    | 2        | 4      | 8     |
    | 5        | 6      | 30    |
    | 7        | 8      | 56    |
    

    【讨论】:

    • 实际上是这样,但是,在您的示例中,数量列不是数据库中表的一部分。它是在创建表后添加的。假设所有列都是数据库中文章表的一部分,那么命令将是 SELECT a.quantity, a.price value1 * value2 AS total FROM items。但在这种情况下 a.quantity 不存在,因为客户将添加此值。您如何访问它?
    猜你喜欢
    • 2016-04-18
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多