如何将新数据添加到datagrid中,也将先前存在的数据保留在那里



我正在从SQL中选择数据到datagrid,代码正常,但是它从我的datagrid中删除了先前的数据。

我的代码(C#WPF SQL DataGrid(:

  private void enter(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter)
                {
                    SqlConnection com = new SqlConnection("Server = localhost; database = PrimaSOFT ; integrated security = true");
                    SqlCommand cmd = new SqlCommand("produktit", com);
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@Barkodi", txtBarkodi.Text);
                    //Created a new DataTable
                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    DataColumn dc = new DataColumn();//Made a new DataColumn to populate above DataTable
                    dc.DataType = System.Type.GetType("System.String");//Defined the DataType inside, this can be [[int]] if you want.
                    dc.ColumnName = "Barkodi";//Gave it a name (important for the custom expression - can only be one word so use underscores if you need multiple words)
                    DataColumn dc2 = new DataColumn();
                    dc2.DataType = System.Type.GetType("System.String");
                    dc2.ColumnName = "Emertimi";
                    DataColumn dc3 = new DataColumn();
                    dc3.DataType = System.Type.GetType("System.Decimal");
                    dc3.ColumnName = "Sasia";
                    DataColumn dc4 = new DataColumn();
                    dc4.DataType = System.Type.GetType("System.Decimal");
                    dc4.ColumnName = "Cmimi";
                    DataColumn dc5 = new DataColumn();
                    dc5.DataType = System.Type.GetType("System.String");
                    dc5.Caption = "sds";
                    dc5.ColumnName = "TVSH";
                    DataColumn dc6 = new DataColumn();
                    dc6.DataType = System.Type.GetType("System.String");
                    dc6.ColumnName = "Total";
                    dc6.Expression = "Cmimi * Sasia";//Multiplying the Price and Quantity DataColumns
                    dataTable.Columns.Add(dc);//Add them to the DataTable
                    dataTable.Columns.Add(dc2);
                    dataTable.Columns.Add(dc3);
                    dataTable.Columns.Add(dc4);
                    dataTable.Columns.Add(dc5);
                    dataTable.Columns.Add(dc6);
                    dtgartikujt.ItemsSource = dataTable.DefaultView;//Set the DataGrid ItemSource to this new generated DataTable
                    com.Open();//Open the SQL connection
                    SqlDataReader reader = cmd.ExecuteReader();//Create a SqlDataReader
                    while (reader.Read())//For each row that the SQL query returns do
                    {
                        DataRow dr = dataTable.NewRow();//Create new DataRow to populate the DataTable (which is currently binded to the DataGrid)
                        dr[0] = reader[0];//Fill DataTable column 0 current row (Product) with reader[0] (Product from sql)
                        dr[1] = reader[1];
                        dr[2] = reader[2];
                        dr[3] = reader[3];
                        dr[4] = reader[4];

                        dataTable.Rows.Add(dr);//Add the new created DataRow to the DataTable
                    }
                }
            }

和代码

                    object sumObject;
                    sumObject = dataTable.Compute("Sum(Totali)", 
                     string.Empty);
                    txttotali.Text = sumObject.ToString();

我期望在datagrid中显示一个新数据,而不会删除先前的数据。我应该如何处理?

编辑:我还附加了总代码,以总结数据列列,然后显示到TextBox

,因为我想我理解您在做什么:与sql(ado.net(代码单独的数据代码,仅运行DataTable零件一次。因此,对于form_load中的运行CreateTable,例如:

public void CreateTable()
{
 DataColumn dc = new DataColumn();//Made a new DataColumn to populate above DataTable
                    dc.DataType = System.Type.GetType("System.String");//Defined the DataType inside, this can be [[int]] if you want.
                    dc.ColumnName = "Barkodi";//Gave it a name (important for the custom expression - can only be one word so use underscores if you need multiple words)
                    DataColumn dc2 = new DataColumn();
                    dc2.DataType = System.Type.GetType("System.String");
                    dc2.ColumnName = "Emertimi";
                    DataColumn dc3 = new DataColumn();
                    dc3.DataType = System.Type.GetType("System.Decimal");
                    dc3.ColumnName = "Sasia";
                    DataColumn dc4 = new DataColumn();
                    dc4.DataType = System.Type.GetType("System.Decimal");
                    dc4.ColumnName = "Cmimi";
                    DataColumn dc5 = new DataColumn();
                    dc5.DataType = System.Type.GetType("System.String");
                    dc5.Caption = "sds";
                    dc5.ColumnName = "TVSH";
                    DataColumn dc6 = new DataColumn();
                    dc6.DataType = System.Type.GetType("System.String");
                    dc6.ColumnName = "Total";
                    dc6.Expression = "Cmimi * Sasia";//Multiplying the Price and Quantity DataColumns
                    dataTable.Columns.Add(dc);//Add them to the DataTable
                    dataTable.Columns.Add(dc2);
                    dataTable.Columns.Add(dc3);
                    dataTable.Columns.Add(dc4);
                    dataTable.Columns.Add(dc5);
                    dataTable.Columns.Add(dc6);
                    dtgartikujt.ItemsSource = dataTable.DefaultView;//Set the DataGrid ItemSource to this new generated DataTable
}

和其余代码:

     long sum=0;
     private void enter(object sender, KeyEventArgs e)
            {
                try
                {
                    if (e.Key == Key.Enter)
                    {
                        SqlConnection com = new SqlConnection("Server = localhost; database = PrimaSOFT ; integrated security = true");
                        SqlCommand cmd = new SqlCommand("produktit", com);
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@Barkodi", txtBarkodi.Text);
                        //Created a new DataTable
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        com.Open();//Open the SQL connection
                        SqlDataReader reader = cmd.ExecuteReader();//Create a SqlDataReader
                        while (reader.Read())//For each row that the SQL query returns do
                        {
                            DataRow dr = dataTable.NewRow();//Create new DataRow to populate the DataTable (which is currently binded to the DataGrid)
                            dr[0] = reader[0];//Fill DataTable column 0 current row (Product) with reader[0] (Product from sql)
                            dr[1] = reader[1];
                            dr[2] = reader[2];
                            dr[3] = reader[3];
                            dr[4] = reader[4];
                            // sum+= Convert.ToInt64(reader[4]); // use the total index instead of 4 . or use reader["total"];
                            dataTable.Rows.Add(dr);//Add the new created DataRow to the DataTable
    // or maybe dtgartikujt.Rows.Add(dr);
                        }
// textbox1.Text=sum.Tostring();
                    }
                }

最新更新