问题描述
我正在尝试使用C#创建一个CRUD应用程序,以跟踪项目,分配给他们的人员及其状态。我的进度很好,但是无法使用“更新”功能。每当我尝试更新记录时,都会收到我自己的错误消息,而不是“成功更新”。
有人知道是什么导致我的if语句无法正确执行吗?
using System;
using System.Windows.Forms;
using System.Data.sqlClient;
using System.Data;
namespace SFTool
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
sqlConnection con = new sqlConnection("my connection string here");
public int ProjectID;
private void MainForm_Load(object sender,System.EventArgs e)
{
// load in sql data to the data grid view
GetProjectsDataset();
}
private void GetProjectsDataset()
{
sqlCommand cmd = new sqlCommand("SELECT * FROM sfProjects",con);
DataTable dt = new DataTable();
con.open();
sqlDataReader sdr = cmd.ExecuteReader();
dt.Load(sdr);
con.Close();
dataGridView.DataSource = dt;
}
private void insertButton_Click(object sender,EventArgs e)
{
// allow user to insert data into the database,or create new records
if (IsValid())
{
sqlCommand cmd = new sqlCommand("INSERT INTO sfProjects VALUES (@Project_ID,@FirstName,@LastName,@Project_Status)",con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Project_ID",projectIDTextBox.Text); // maps @Project_ID to the project ID textBox
cmd.Parameters.AddWithValue("@FirstName",firstNameTextBox.Text);
cmd.Parameters.AddWithValue("@LastName",lastNameTextBox.Text);
cmd.Parameters.AddWithValue("@Project_Status",projectStatusTextBox.Text);
con.open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("New record has been successfully added to the database","Saved",MessageBoxButtons.OK,MessageBoxIcon.information);
// Now update/REFRESH the database so it shows the new record
GetProjectsDataset();
// reset form controls
ResetFormControls();
}
}
// data validation. (Make sure project id is never empty)
private bool IsValid()
{
if (projectIDTextBox.Text == string.Empty)
{
MessageBox.Show("Project ID is required.","Error",MessageBoxIcon.Error);
return false;
}
// else return true (it is valid)
return true;
}
private void resetButton_Click(object sender,EventArgs e)
{
// resets,or clears,the textBoxes
ResetFormControls();
}
private void ResetFormControls()
{
projectIDTextBox.Clear();
firstNameTextBox.Clear();
lastNameTextBox.Clear();
projectStatusTextBox.Clear();
projectIDTextBox.Focus();
}
private void dataGridView_CellClick(object sender,DataGridViewCellEventArgs e)
{
// WHen you click on a row in the data grid,the textBoxes will automatically populate with that rows values
ProjectID = Convert.ToInt32(dataGridView.Rows[0].Cells[0].Value);
projectIDTextBox.Text = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
firstNameTextBox.Text = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
lastNameTextBox.Text = dataGridView.SelectedRows[0].Cells[2].Value.ToString();
projectStatusTextBox.Text = dataGridView.SelectedRows[0].Cells[3].Value.ToString();
}
private void updateButton_Click(object sender,EventArgs e)
{
if (ProjectID > 0)
{
sqlCommand cmd = new sqlCommand("UPDATE sfProjects SET (Project_ID = @Project_ID,FirstName = @FirstName,LastName = @LastName,Project_Status = @Project_Status WHERE ProjectID = @Project_ID)",projectStatusTextBox.Text);
cmd.Parameters.AddWithValue("@Project_ID",this.ProjectID);
con.open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Record is successfully updated","Updated",MessageBoxIcon.information);
// Now update/REFRESH the database so it shows the new record
GetProjectsDataset();
// reset form controls
ResetFormControls();
}
else
{
MessageBox.Show("Please select a record to update",MessageBoxIcon.Error);
}
}
}
}
更新:我终于明白了
ProjectID = Convert.ToInt32(dataGridView.Rows[0].Cells[0].Value);
需要成为
ProjectID = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)