Datagridview аварийно завершает работу при нажатии на заголовок.
Если я нажму на заголовок своего datagridview, он выйдет из строя. Я понятия не имею, как это исправить. Я получаю эту ошибку:
Необработанное исключение типа System.Об произошло в mscorlib.dll
Дополнительная информация: индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции.
В этот момент он рушится:
private void dgvProfiles_CellClick(object sender, DataGridViewCellEventArgs e) { indexRow = e.RowIndex; // get the selected Row Index DataGridViewRow row = dgvProfiles.Rows[indexRow]; }
Что я уже пробовал:
Я попытался отредактировать DataGridViewRow row = dgvProfiles.Строки[indexRow], но, кажется, ничего не работает.
namespace ProfileManager { public partial class Form1 : Form { DataTable dt = new DataTable(); private int indexRow; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { dt.Columns.AddRange(new DataColumn[8] {new DataColumn("ID", typeof(string)), new DataColumn("First Name", typeof(string)), new DataColumn("Last Name", typeof(string)), new DataColumn ("Phone", typeof(string)), new DataColumn("Email", typeof(string)), new DataColumn("City", typeof(string)), new DataColumn("State", typeof(string)), new DataColumn("Zip", typeof(string))}); } private void btnAdd_Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(txtID.Text)) { MessageBox.Show("Please complete ID Name field."); } else if (String.IsNullOrEmpty(txtFirstName.Text)) { MessageBox.Show("Please complete First Name field."); } else if (String.IsNullOrEmpty(txtLastName.Text)) { MessageBox.Show("Please complete Last Name field."); } else if (String.IsNullOrEmpty(txtPhone.Text)) { MessageBox.Show("Please complete Phone field."); } else if (String.IsNullOrEmpty(txtEmail.Text)) { MessageBox.Show("Please complete Email field."); } else if (String.IsNullOrEmpty(txtCity.Text)) { MessageBox.Show("Please complete City field."); } else if (String.IsNullOrEmpty(cbxState.Text)) { MessageBox.Show("Please complete State field."); } else if (String.IsNullOrEmpty(txtZip.Text)) { MessageBox.Show("Please complete Zip Code field."); } else { for (int row = 0; row < dgvProfiles.Rows.Count; row++) { for (int col = 0; col < dgvProfiles.Columns.Count; col++) { if (dgvProfiles.Rows[row].Cells[col].Value != null && dgvProfiles.Rows[row].Cells[col].Value.Equals(txtEmail.Text.Trim())) { MessageBox.Show("Duplicate email was entered."); return; } else if (dgvProfiles.Rows[row].Cells[col].Value != null && dgvProfiles.Rows[row].Cells[col].Value.Equals(txtID.Text.Trim())) { MessageBox.Show("Duplicate ID was entered."); return; } } } dt.Rows.Add(txtID.Text, txtFirstName.Text, txtLastName.Text, txtPhone.Text, txtEmail.Text, txtCity.Text, cbxState.Text, txtZip.Text); this.dgvProfiles.DataSource = dt; txtID.Text = ""; txtFirstName.Text = ""; txtLastName.Text = ""; txtPhone.Text = ""; txtEmail.Text = ""; txtPhone.Text = ""; txtCity.Text = ""; cbxState.SelectedIndex = -1; txtZip.Text = ""; MessageBox.Show("Record was added successfully."); } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void btnClear_Click(object sender, EventArgs e) { DialogResult dialog = MessageBox.Show("Are you sure you want to clear every field? All data will be lost!", "Clear", MessageBoxButtons.YesNo); if (dialog == DialogResult.Yes) { txtID.Text = ""; txtFirstName.Text = ""; txtLastName.Text = ""; txtPhone.Text = ""; txtEmail.Text = ""; txtCity.Text = ""; cbxState.SelectedIndex = -1; txtZip.Text = ""; dt.Rows.Clear(); } else { return; } } private void btnClose_Click(object sender, EventArgs e) { DialogResult dialog = MessageBox.Show("Are you sure you want to close? All data will be lost!", "Exit", MessageBoxButtons.YesNo); if (dialog == DialogResult.Yes) { Application.Exit(); } else { return; } } private void txtFirstName_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back); } private void txtLastName_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back); } private void txtCity_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back); } private void groupBox1_Enter(object sender, EventArgs e) { } private void btnDelete_Click(object sender, EventArgs e) { if (dgvProfiles.SelectedCells.Count <= 0) { MessageBox.Show("Please select a record you would like to delete."); } else { foreach (DataGridViewCell oneCell in dgvProfiles.SelectedCells) { if (oneCell.Selected) { dgvProfiles.Rows.RemoveAt(oneCell.RowIndex); MessageBox.Show("Record was deleted successfully!"); break; } else if (oneCell.RowIndex <= 0) { MessageBox.Show("Please select a record you would like to delete"); } } } } private void btnUpdate_Click(object sender, EventArgs e) { if (dgvProfiles.SelectedCells.Count <= 0) { MessageBox.Show("No record was selected to update."); } else { for (int row = 0; row < dgvProfiles.Rows.Count; row++) { for (int col = 0; col < dgvProfiles.Columns.Count; col++) { if (dgvProfiles.Rows[row].Cells[col].Value != null && dgvProfiles.Rows[row].Cells[col].Value.Equals(txtEmail.Text.Trim())) { MessageBox.Show("Duplicate email was entered."); return; } else if (dgvProfiles.Rows[row].Cells[col].Value != null && dgvProfiles.Rows[row].Cells[col].Value.Equals(txtID.Text.Trim())) { MessageBox.Show("Duplicate ID was entered."); return; } } } DataGridViewRow newDataRow = dgvProfiles.Rows[indexRow]; newDataRow.Cells[0].Value = txtID.Text; newDataRow.Cells[1].Value = txtFirstName.Text; newDataRow.Cells[2].Value = txtLastName.Text; newDataRow.Cells[3].Value = txtPhone.Text; newDataRow.Cells[4].Value = txtEmail.Text; newDataRow.Cells[5].Value = txtCity.Text; newDataRow.Cells[6].Value = cbxState.Text; newDataRow.Cells[7].Value = txtZip.Text; } } private void dgvProfiles_CellClick(object sender, DataGridViewCellEventArgs e) { indexRow = e.RowIndex; // get the selected Row Index DataGridViewRow row = dgvProfiles.Rows[indexRow]; txtID.Text = row.Cells[0].Value.ToString(); txtFirstName.Text = row.Cells[1].Value.ToString(); txtLastName.Text = row.Cells[2].Value.ToString(); txtPhone.Text = row.Cells[3].Value.ToString(); txtEmail.Text = row.Cells[4].Value.ToString(); txtCity.Text = row.Cells[5].Value.ToString(); cbxState.Text = row.Cells[6].Value.ToString(); txtZip.Text = row.Cells[7].Value.ToString(); } private void txtEmail_Validating(object sender, CancelEventArgs e) { System.Text.RegularExpressions.Regex rEMail = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"); if (txtEmail.Text.Length > 0) { if (!rEMail.IsMatch(txtEmail.Text)) { MessageBox.Show("Email is required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); txtEmail.SelectAll(); e.Cancel = true; } } } private void txtPhone_Validating(object sender, CancelEventArgs e) { System.Text.RegularExpressions.Regex rPhone = new System.Text.RegularExpressions.Regex(@"(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$"); if (txtPhone.Text.Length > 0) { if (!rPhone.IsMatch(txtPhone.Text)) { MessageBox.Show("Valid phone number is required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); txtPhone.SelectAll(); e.Cancel = true; } } } private void txtZip_Validating(object sender, CancelEventArgs e) { System.Text.RegularExpressions.Regex rZip = new System.Text.RegularExpressions.Regex(@"(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvxy]{1} *\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvxy]{1}\d{1}$)"); if (txtZip.Text.Length > 0) { if (!rZip.IsMatch(txtZip.Text)) { MessageBox.Show("Valid zip is required. Must be in a 5 digit format.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); txtZip.SelectAll(); e.Cancel = true; } } } private void txtPhone_KeyPress(object sender, KeyPressEventArgs e) { char ch = e.KeyChar; if (!Char.IsDigit(ch) && ch != 8 && (e.KeyChar != '-')) { e.Handled = true; } } private void txtZip_KeyPress(object sender, KeyPressEventArgs e) { char ch = e.KeyChar; if (!Char.IsDigit(ch) && ch != 8) { e.Handled = true; } } private void txtID_KeyPress(object sender, KeyPressEventArgs e) { char ch = e.KeyChar; if (!Char.IsDigit(ch) && ch != 8) { e.Handled = true; } } } }
[no name]
Мы не являемся сервисом "отладка всей моей кодовой базы". Что значит для вас крушение? Какие ошибки вы видите на своем экране?
Suvendu Shekhar Giri
Каковы наблюдения с помощью отладки?
ZurdoDev
Как уже упоминалось выше, сначала вы должны выполнить некоторые основные отладочные работы и устранить неполадки. Мы не можем запустить ваш код.
Member 12786108
Мое извинение. Добавил еще кое-какую информацию.