У меня есть DataGridView с 4-мя столбцами:
UserID, FirstName, LastName, Email
оператор Update изменяет неправильные записиКогда я дважды щелкните строку, другая форма всплывает 4 текстовых полей со значениями в строке и внутри тех, каждое текстовое поле с значение ячейки
Когда я нажимаю кнопку отправки, эта строка обновляется значениями текстового поля.
У меня есть работа с
....where UserID = @UserID
. Но если ячейка столбца меняет ISUserId
, изменяется неправильная строка или никакая строка.
Вопрос
Как я могу изменить строку для любого значения столбца и он изменяет правый ряд без столбца инкрементора?
Код
public partial class EditUser : Form
{
public DataGridViewRow dgvRow;
public EditUser()
{
InitializeComponent();
}
private void EditUser_Load(object sender, EventArgs e)
{
lbl5.Text = dgvRow.Cells[0].Value.ToString();
txtUserID.Text = dgvRow.Cells[0].Value.ToString();
txtFName.Text = dgvRow.Cells[1].Value.ToString();
txtLName.Text = dgvRow.Cells[2].Value.ToString();
txtEmail.Text = dgvRow.Cells[3].Value.ToString();
label1.Visible = false;
txtUserID.Visible = false;
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection sc = new SqlConnection();
SqlCommand com = new SqlCommand();
sc.ConnectionString = ("");
sc.Open();
com.Connection = sc;
com.CommandText = ("update JoshUserTable SET UserID = @UserID, [email protected],[email protected],[email protected] where UserID = @UserID");
com.Parameters.AddWithValue("@UserID", txtUserID.Text);
com.Parameters.AddWithValue("@FirstName", txtFName.Text);
com.Parameters.AddWithValue("@LastName", txtLName.Text);
com.Parameters.AddWithValue("@Email", txtEmail.Text);
com.ExecuteNonQuery();
sc.Close();
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
label1.Visible = true;
txtUserID.Visible = true;
SqlConnection sc = new SqlConnection();
SqlCommand con = new SqlCommand();
sc.ConnectionString = ("");
sc.Open();
con.Connection = sc;
con.CommandText = ("update JoshUserTable SET UserID = @UserID, [email protected],[email protected],[email protected] where FirstName = @FirstName");
con.Parameters.AddWithValue("@UserID", txtUserID.Text);
con.Parameters.AddWithValue("@FirstName", txtFName.Text);
con.Parameters.AddWithValue("@LastName", txtLName.Text);
con.Parameters.AddWithValue("@Email", txtEmail.Text);
con.ExecuteNonQuery();
sc.Close();
}
}
Спасибо за вход, я пошел немного другой маршрут. Наряду с полем userIDtext я сделал ярлык, который показывает идентификатор пользователя. Когда появляется форма редактирования, пользовательский текст не невидим. Рядом с меткой UserID у меня есть ссылка «change», которая при щелчке делает текстовое поле UserID видимым с целью изменения имени. Если ссылка не отмечена, не нужно менять имя. В моем событии linkcheck я изменил предложение where, чтобы совместить имя и фамилию, так как вероятность того, что их имя не изменится, даже если может быть ID пользователя или электронной почты. Однако строка не меняется. См. Выше –
Вау, Мне понадобилось секунду, чтобы понять, что не имеет смысла. Я делал свою ссылку, чтобы сделать больше, чем предполагалось. –
ok получил вас - во всяком случае, я действительно думаю, что вы должны ** проверить исходное значение (ы) и установить (a) новое значение **. При вызове 'executeNonQuery()' вы получите количество обновленных записей. Если эта запись * не равна 1 *, то что-то пошло ужасно неправильно! –