rwheeler23
asked on
VS C# Write data set to another table
I have a dataset defined as MyDataSet= new System.Data.DataSet() along with a DataAdapter called MyDataAdapter. I then use _commandBuilder = new SqlCommandBuilder(MYDataAd apter) and finally MyDataAdapter.Fill(MyDataS et) to get the data and present it to the user via a data grid view. On the dgv I did add a Checkbox. Now on the screen the user sees values for order number, customer, amount plus the checkbox. The only field the user can change is the checkbox. If the user checks the box, I do not want to write these order numbers to another table. So the question here is:
How do I set up the code under the 'Save' button so it will write this dataset to another table but only for those records that have not been checked? Do I have to loop through each record in the dataset looking for the unchecks one and write only them or is there a way to commit this entire dataset to another table? How do I get this commit to write to another table? I have included the complete code below.
private void DisplayOpenSalesOrders()
{
/* Define dataset for open sales orders in My */
MyDataSet = new System.Data.DataSet();
MyDataSet.CaseSensitive = false;
/* Define the data command for the open sales orders in My */
MyDataCommand = new System.Data.SqlClient.SqlC ommand();
MyDataCommand.Connection = MyDataConnection;
MyDataCommand.CommandText = "SELECT * FROM SelectOpenOrders WHERE DOCDATE <= '" + txtThroughDate.Text + "' ORDER BY DOCDATE";
/* Define the data adapter for the open sales orders */
MyDataAdapter = new System.Data.SqlClient.SqlD ataAdapter ();
MyDataAdapter.SelectComman d = MyDataCommand;
_commandBuilder = new SqlCommandBuilder(MyDataAd apter);
/* Populate the data set */
MyDataAdapter.Fill(MyDataS et);
dgvOpenSalesOrders.DataErr or += new DataGridViewDataErrorEvent Handler(dg vOpenSales Orders_Dat aError);
dgvOpenSalesOrders.RowHead ersVisible = false;
dgvOpenSalesOrders.DataSou rce = MyDataSet.Tables[0].Defaul tView;
dgvOpenSalesOrders.AutoGen erateColum ns = true;
dgvOpenSalesOrders.Default CellStyle. NullValue = ' ';
dgvOpenSalesOrders.AllowUs erToAddRow s = false;
dgvOpenSalesOrders.AllowUs erToDelete Rows = false;
dgvOpenSalesOrders.Columns [0].Width = 80;
dgvOpenSalesOrders.Columns [0].ReadOn ly = true;
dgvOpenSalesOrders.Columns [0].Header Text = "Doc Date";
dgvOpenSalesOrders.Columns [0].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [1].Width = 110;
dgvOpenSalesOrders.Columns [1].ReadOn ly = true;
dgvOpenSalesOrders.Columns [1].Header Text = "Req Ship Date";
dgvOpenSalesOrders.Columns [1].Defaul tCellStyle .Alignment = DataGridViewContentAlignme nt.MiddleC enter;
dgvOpenSalesOrders.Columns [1].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [2].Width = 100;
dgvOpenSalesOrders.Columns [2].ReadOn ly = true;
dgvOpenSalesOrders.Columns [2].Header Text = "Doc Type";
dgvOpenSalesOrders.Columns [2].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [3].Width = 120;
dgvOpenSalesOrders.Columns [3].ReadOn ly = true;
dgvOpenSalesOrders.Columns [3].Header Text = "Doc Number";
dgvOpenSalesOrders.Columns [3].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [4].Width = 100;
dgvOpenSalesOrders.Columns [4].ReadOn ly = true;
dgvOpenSalesOrders.Columns [4].Header Text = "Cust Number";
dgvOpenSalesOrders.Columns [4].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [5].Width = 300;
dgvOpenSalesOrders.Columns [5].ReadOn ly = true;
dgvOpenSalesOrders.Columns [5].Header Text = "Cust Name";
dgvOpenSalesOrders.Columns [5].Defaul tCellStyle .Tag = "TOUPPER";
dgvOpenSalesOrders.Columns [6].Width = 100;
dgvOpenSalesOrders.Columns [6].ReadOn ly = true;
dgvOpenSalesOrders.Columns [6].Defaul tCellStyle .Alignment = DataGridViewContentAlignme nt.MiddleR ight;
dgvOpenSalesOrders.Columns [6].Defaul tCellStyle .Format = "c";
dgvOpenSalesOrders.Columns [6].Header Text = "Doc Amount";
DataGridViewCheckBoxColumn colCheckBox = new DataGridViewCheckBoxColumn ();
colCheckBox.HeaderText = "Keep";
colCheckBox.Name = "colCheck";
colCheckBox.Width = 36;
dgvOpenSalesOrders.Columns .Insert(7, colCheckBox);
dgvOpenSalesOrders.EditMod e = DataGridViewEditMode.EditO nEnter;
dgvOpenSalesOrders.Focus() ;
}
private void dgvOpenSalesOrders_DataErr or(object sender, DataGridViewDataErrorEvent Args anError)
{
}
private void btnDisplay_Click(object sender, EventArgs e)
{
DisplayOpenSalesOrders();
}
}
How do I set up the code under the 'Save' button so it will write this dataset to another table but only for those records that have not been checked? Do I have to loop through each record in the dataset looking for the unchecks one and write only them or is there a way to commit this entire dataset to another table? How do I get this commit to write to another table? I have included the complete code below.
private void DisplayOpenSalesOrders()
{
/* Define dataset for open sales orders in My */
MyDataSet = new System.Data.DataSet();
MyDataSet.CaseSensitive = false;
/* Define the data command for the open sales orders in My */
MyDataCommand = new System.Data.SqlClient.SqlC
MyDataCommand.Connection = MyDataConnection;
MyDataCommand.CommandText = "SELECT * FROM SelectOpenOrders WHERE DOCDATE <= '" + txtThroughDate.Text + "' ORDER BY DOCDATE";
/* Define the data adapter for the open sales orders */
MyDataAdapter = new System.Data.SqlClient.SqlD
MyDataAdapter.SelectComman
_commandBuilder = new SqlCommandBuilder(MyDataAd
/* Populate the data set */
MyDataAdapter.Fill(MyDataS
dgvOpenSalesOrders.DataErr
dgvOpenSalesOrders.RowHead
dgvOpenSalesOrders.DataSou
dgvOpenSalesOrders.AutoGen
dgvOpenSalesOrders.Default
dgvOpenSalesOrders.AllowUs
dgvOpenSalesOrders.AllowUs
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.Columns
DataGridViewCheckBoxColumn
colCheckBox.HeaderText = "Keep";
colCheckBox.Name = "colCheck";
colCheckBox.Width = 36;
dgvOpenSalesOrders.Columns
dgvOpenSalesOrders.EditMod
dgvOpenSalesOrders.Focus()
}
private void dgvOpenSalesOrders_DataErr
{
}
private void btnDisplay_Click(object sender, EventArgs e)
{
DisplayOpenSalesOrders();
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I am trying this but it keeps telling me the table rbsSOPTRXHIST does not exist even though it does. The data connection for this is the same as the one used to read the data so I know the data connection is correct.
private void bthTrxHist_Click(object sender, EventArgs e)
{
var adapterForSOPTrxHist = new SqlDataAdapter("SELECT * FROM GPDataSet.Tables[0] WHERE colcheck = false", GPDataConnection);
var builderForSOPTrxHist = new SqlCommandBuilder(adapterF orSOPTrxHi st);
adapterForSOPTrxHist.Updat e(GPDataSe t, "rbsSOPTRXHIST");
}
private void bthTrxHist_Click(object sender, EventArgs e)
{
var adapterForSOPTrxHist = new SqlDataAdapter("SELECT * FROM GPDataSet.Tables[0] WHERE colcheck = false", GPDataConnection);
var builderForSOPTrxHist = new SqlCommandBuilder(adapterF
adapterForSOPTrxHist.Updat
}
ASKER
OK, how do I loop through the records in the datagrid? I discovered how to loop through the records in the dataset but that does me no good because the check column is not part of the dataset.
ASKER
Why does this code give me the message "Object not set to an instance of an object"? The field causing the issue is colCheck and that in the Checkbox that was added to the dataview.
private void bthTrxHist_Click(object sender, EventArgs e)
{
TRNSDATE = DateTime.Now;
TRNSFLAG = false;
foreach(DataGridViewRow row in dgvOpenSalesOrders.Rows)
{
try
{
MessageBox.Show(row.Cells[ "SOPNUMBE" ].Value.To String() + "Keep: " + row.Cells["colCheck"].Valu e.ToString ());
}
catch (Exception ex)
{
string eMsg = "004: ERROR: " + ex.Message;
if (StackTraceWanted) eMsg += "\n" + ex.StackTrace;
MessageBox.Show(eMsg);
}
}
}
private void bthTrxHist_Click(object sender, EventArgs e)
{
TRNSDATE = DateTime.Now;
TRNSFLAG = false;
foreach(DataGridViewRow row in dgvOpenSalesOrders.Rows)
{
try
{
MessageBox.Show(row.Cells[
}
catch (Exception ex)
{
string eMsg = "004: ERROR: " + ex.Message;
if (StackTraceWanted) eMsg += "\n" + ex.StackTrace;
MessageBox.Show(eMsg);
}
}
}
ASKER
I discovered that I first had to loop through the add check column field to give the column the value of false and not null. You got me started. Thanks.
ASKER