I am building a WPF form with a datagrid that pulls the data from the datagrid when a checkbox is checked to "select" that row.
DOC_Number is an int but it's pulled data in the datagrid from a SQL server. I have tried to convert it to a string or to text because it was telling me that it was unacceptable as an integer prior, now it won't convert to a string.
I'm unsure if it's not getting the checkbox data properly or if DOC_Number is not registering as an int.
I'm getting an error:
System.InvalidCastException: 'Unable to cast object of type 'System.Windows.Controls.DataGridTextColumn' to type 'System.IConvertible'
at the line int DocIdx = Convert.ToInt32(DOC_Number);
private void BtnGridUpdate_Click(object sender, EventArgs e)
{
int employeeID = Convert.ToInt32(EmpID.Text);
UpdateInternal0(employeeID);
}
void UpdateInternal0(int employeeId)
{
try
{
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.adminConnectionString))
{
con.Open();
foreach (DataRowView drv in InternalGrid0.SelectedItems)
{
DataRow row = drv.Row;
bool isSelected = Convert.ToBoolean(drv.Row[0]);
if (isSelected)
{
string sqlString = "INSERT INTO ChecklistTransitionTable (RelatedEmployeeID, RelatedDocIdx) VALUES (@EmpID, @DOC_Number)";
using (SqlCommand cmd = new SqlCommand(sqlString, con))
{
for (int i = 0; i < InternalGrid0.Columns.Count; i++)
{
int DocIdx = Convert.ToInt32(DOC_Number);
int employeeID = Convert.ToInt32(EmpID.Text);
cmd.Parameters.AddWithValue("@EmpID", employeeID = (int)row[i]);
cmd.Parameters.AddWithValue("@DOC_Number", DocIdx = (int)row[i]);
int result = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
Console.WriteLine("Test");
//Check Error
if (result < 0)
{
System.Windows.Forms.MessageBox.Show("Error inserting data into database!");
}
}
}
}
}
}
System.Windows.Forms.MessageBox.Show("Employee data successfully updated.");
}
catch (SqlException ex)
{
System.Windows.Forms.MessageBox.Show(string.Format("\nMessage ---\n{0}", ex.Message));
}
}
for
loop over columns doesn't make sense. you should be able to get document id from DataRow row
object:
foreach (DataRowView drv in InternalGrid0.SelectedItems)
{
DataRow row = drv.Row;
bool isSelected = Convert.ToBoolean(drv.Row[0]);
if (isSelected)
{
string sqlString = "INSERT INTO ChecklistTransitionTable (RelatedEmployeeID, RelatedDocIdx) VALUES (@EmpID, @DOC_Number)";
using (SqlCommand cmd = new SqlCommand(sqlString, con))
{
int DocIdx = Convert.ToInt32(row["DOC_Number"]);
cmd.Parameters.AddWithValue("@EmpID", employeeId);
cmd.Parameters.AddWithValue("@DOC_Number", DocIdx);
int result = cmd.ExecuteNonQuery();
if (result < 0)
{
System.Windows.Forms.MessageBox.Show("Error inserting data into database!");
}
}
}
}