【问题标题】:Display sql data in datagrid view having predefined columns在具有预定义列的数据网格视图中显示 sql 数据
【发布时间】:2015-12-21 07:59:06
【问题描述】:

当在 PID(文本框)中输入 id(在数据库中)时,我希望 sql 数据显示在数据网格预定义列中。例如:如果我在文本框中输入 1,product_Name(wai wai chicken) 应该显示在 Particulars 列中,product_Id(1) 本身应该显示在 PID 列中,actual_Sp(15) 应该显示在 Amount 列中,并且当在数量文本框中输入数字,它应该显示在单位数量列中,并且应该乘以金额(例如,当输入 1 时,显示 wai wai 以及当在数量文本框中输入 2 时,金额显示为 15(actual_sp),金额应该显示 30(as 15*2=30))。

我尝试了以下代码,但它在我的 DGV 中添加了新列,而不是在我的预定义列中显示:

string cc = "";
        int n;
        if (int.TryParse(textBox1.Text, out n))
        {
            cc = "product_Id = " + textBox1.Text.Trim();
        }
        else
        {
            cc = "product_Name LIKE '%" + textBox1.Text.Trim() + "%'";
        }

        if (string.IsNullOrEmpty(textBox1.Text))
        {
            cc = "1 = 1";
        }

        SqlConnection con = new SqlConnection("Data Source=SUMIT;Initial Catalog=Project;Integrated Security=True");

        SqlCommand cmd = new SqlCommand("Select product_Name as [Product Name],cast(actual_Sp as INT) * '" + textBox2.Text + " 'as [Actual SP] from Product WHERE " + cc, con); ;

    cmd.CommandType = CommandType.Text;
        SqlDataAdapter sda = new SqlDataAdapter(cmd);

        DataTable dt = new DataTable();
        sda.Fill(dt);
        dataGridView1.AutoGenerateColumns = false;
       dataGridView1.ColumnCount = 7;

        dataGridView1.Columns[0].Name = "ProductId";
        dataGridView1.Columns[0].HeaderText = "PID";
        dataGridView1.Columns[0].DataPropertyName = "product_Id";

        dataGridView1.Columns[1].HeaderText = "S.N.";
        dataGridView1.Columns[1].Name = "Serial Number";

        dataGridView1.Columns[2].Name = "Particulars";
        dataGridView1.Columns[2].HeaderText = "Particulars";
        dataGridView1.Columns[2].DataPropertyName = "product_Name";


        dataGridView1.Columns[3].Name = "Unit Quantity";
        dataGridView1.Columns[3].HeaderText = "Unit Quantity";

        dataGridView1.Columns[4].Name = "Amount";
        dataGridView1.Columns[4].HeaderText = "Amount";

        dataGridView1.Columns[5].Name = "Discount";
        dataGridView1.Columns[5].HeaderText = "Discount";

        dataGridView1.Columns[6].Name = "Sub-Total";
        dataGridView1.Columns[6].HeaderText = "Sub-Total";     
        dataGridView1.DataSource = dt;

    }

【问题讨论】:

  • SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 你能展示你的前端代码吗(asp.net webforms?)。
  • @sr28 m 不使用(asp.net web),它的c#(win form)
  • 您可以改为创建列表视图。使用列表视图,您可以比使用网格视图更好地自定义网格。
  • 看起来您需要将 DGV 中的列数据绑定到您希望它们包含的 SQL 列。

标签: c# sql-server datagrid


【解决方案1】:

这可能对你有用。

SqlDataAdapter a = new SqlDataAdapter(
                    "Select product_Name as [Product Name],
                            actual_Sp as [Actual SP] from Product WHERE " + cc, con);

SqlDataAdapter a = new SqlDataAdapter(
                    "Select product_Name as [Product Name], 
                            actual_Sp * " + TxtQty.Text + " as [Actual SP] 
                            from Product WHERE " + cc, con);

这将乘以 actual_Sp 为您添加到文本框的数量

【讨论】:

  • 当我调试时它显示将数据类型 varchar 转换为 numeric 时出错
  • 要运行此查询 actual_Sp 应该是数字类型而不是 varchar。顺便说一句,你可以试试cast(actual_Sp as INT) * " + TxtQty.Text + "
  • actual_Sp 是数字类型,但仍然显示错误
  • 现在无法在数据绑定 DataGridView 控件错误上设置其显示的 ColumnCount 属性。我已经编辑了我发布的代码,请再过一遍..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多