C# 索引超出范围。必须为非负且小于集合的大小。参数名称:索引

C# 索引超出范围。必须为非负且小于集合的大小。参数名称:索引,c#,C#,伙计们,我真的需要你们的帮助。我在上面的标题中得到了一个错误。所有尝试都是在datagridview被单击时,它应该将所选记录显示到文本框中,并将其以新的形式打开。这是我的密码 using System.Data; using System.Data.SqlClient; namespace DataGridview { public partial class FrmDataGrid : Form { SqlCo

伙计们,我真的需要你们的帮助。我在上面的标题中得到了一个错误。所有尝试都是在datagridview被单击时,它应该将所选记录显示到文本框中,并将其以新的形式打开。这是我的密码

using System.Data;    
using System.Data.SqlClient;

    namespace DataGridview
    {
        public partial class FrmDataGrid : Form
        {
            SqlConnection con = new SqlConnection("ConnectionString");
            public FrmDataGrid()
            {
                InitializeComponent();
            }

            private void FrmDataGrid_Load(object sender, EventArgs e)
            {
                try {
                    con.Open();
                    SqlCommand cmd = con.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT * FROM UserData";

                    cmd.ExecuteNonQuery();

                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                    dataGridView1.DataSource = dt;

                    con.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
                    textBox1.Text = dataGridView1.SelectedRows[0].Cells["UserID"].Value.ToString();
                    textBox2.Text = dataGridView1.SelectedRows[1].Cells["FullName"].Value.ToString();
                    textBox3.Text = dataGridView1.SelectedRows[2].Cells["Username"].Value.ToString();
                    textBox4.Text = dataGridView1.SelectedRows[3].Cells["UserPassword"].Value.ToString();
                    textBox5.Text = dataGridView1.SelectedRows[4].Cells["UserRole"].Value.ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

                FrmUpdate FormUpdate = new FrmUpdate();
                FormUpdate.ShowDialog();
            }
        }
    }

在以下调用之一期间,您很可能选择了超出范围的行:
dataGridView1.SelectedRows[0]

您试图获取5行,甚至没有检查db查询结果中是否存在5行。我认为您正在尝试获取一行的5列,因此请根据您的要求使用以下代码:

textBox1.Text = dataGridView1.SelectedRows[0].Cells["UserID"].Value.ToString();
textBox2.Text = dataGridView1.SelectedRows[0].Cells["FullName"].Value.ToString();
textBox3.Text = dataGridView1.SelectedRows[0].Cells["Username"].Value.ToString();
textBox4.Text = dataGridView1.SelectedRows[0].Cells["UserPassword"].Value.ToString();
textBox5.Text = dataGridView1.SelectedRows[0].Cells["UserRole"].Value.ToString();

请阅读错误消息并使用调试器。它告诉你你要的是一个集合中不存在的元素。最可能的罪魁祸首是以下行之一:
dataGridView1.SelectedRows[0]
。单击单元格时,您可能没有选择5行。感谢您的帮助。我刚想出来,你的答案是正确的。我非常感谢你的帮助。但是我怎样才能将这些数据发送到一个新的表单中呢?你能帮我获取上面的代码吗。当我单击“数据网格视图”单元时,我希望它打开一个包含所选记录的新表单?先谢谢你。