已有57人关注
关于C#入门到精通中例15.14的问题
发表在C#图书答疑 2010-10-23
是否精华
版块置顶:
老师你好,我自已建个表,代码都仿书中例15.14写,调试通过,操作显示“索引超出范围,必需国非负值合小于集合的大小 参数名index”什么意思。我的表是
  编号    int(4 )
  姓名    varchar(16)
  年龄    int(4)
  性名    char(2) 
且我没用到什么index参数 
代码为
 private void Form1_Load(object sender, EventArgs e)
        {
            string strconn = "server=.;database=DB_stu;integrated security=true";
            conn = new SqlConnection(strconn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            string strcmd = "select * from tb_stu";
            cmd.CommandText = strcmd;
            cmd.CommandType = CommandType.Text;
            sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            ds = new DataSet();
            sda.Fill(ds,"dd");
            dataGridView1.DataSource=ds.Tables[0];
            

        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = ds.Tables["dd"];
            sda.FillSchema(dt,SchemaType.Mapped);
            DataRow dr = dt.Rows.Find(txtID.Text);
            dr["姓名"] = txtName.Text.Trim();
            dr["性别"] = txtSex.Text.Trim();
            dr["年龄"]=txtAge.Text.Trim();
            SqlCommandBuilder sddd = new SqlCommandBuilder(sda);
            sda.Update(dt);
            
            
            
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                txtID.Text = dataGridView1.SelectedCells[0].Value.ToString();
                txtName.Text = dataGridView1.SelectedCells[1].Value.ToString();
                txtSex.Text = dataGridView1.SelectedCells[2].Value.ToString();
                txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
分享到:
精彩评论 3
lyf681888
学分:0 LV1
2010-10-25
沙发
读者朋友:
你好,之所以出现上述问题是由于访问超出集合的索引范围引起的,
解决方法如下:

txtID.Text = dataGridView1.SelectedCells[0].Value.ToString();
txtName.Text = dataGridView1.SelectedCells[1].Value.ToString();
txtSex.Text = dataGridView1.SelectedCells[2].Value.ToString();
txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString();
更改为:
txtID.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[0].Value.ToString();
txtName.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[1].Value.ToString();
txtSex.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[2].Value.ToString();
txtAge.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[3].Value.ToString();
zhanchen761
学分:0 LV1
TA的每日心情
打卡
2022-08-20 09:54:13
2010-10-26
板凳
[FIELDSET][LEGEND]引自:楼主[/LEGEND]
老师你好,我自已建个表,代码都仿书中例15.14写,调试通过,操作显示“索引超出范围,必需国非负值合小于集合的大小 参数名index”什么意思。我的表是
  编号    int(4 )
  姓名    varchar(16)
  年龄    int(4)
  性名    char(2) 
且我没用到什么index参数 
代码为
 private void Form1_Load(object sender, EventArgs e)
        {
            string strconn = "server=.;database=DB_stu;integrated security=true";
            conn = new SqlConnection(strconn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            string strcmd = "select * from tb_stu";
            cmd.CommandText = strcmd;
            cmd.CommandType = CommandType.Text;
            sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            ds = new DataSet();
            sda.Fill(ds,"dd");
            dataGridView1.DataSource=ds.Tables[0];
            

        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = ds.Tables["dd"];
            sda.FillSchema(dt,SchemaType.Mapped);
            DataRow dr = dt.Rows.Find(txtID.Text);
            dr["姓名"] = txtName.Text.Trim();
            dr["性别"] = txtSex.Text.Trim();
            dr["年龄"]=txtAge.Text.Trim();
            SqlCommandBuilder sddd = new SqlCommandBuilder(sda);
            sda.Update(dt);
            
            
            
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
               txtID.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[0].Value.ToString();
               txtName.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[1].Value.ToString();
               txtSex.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[2].Value.ToString();
               txtAge.Text = dataGridView1.SelectedRows[e.RowIndex].Cells[3].Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
[/FIELDSET]

回复:
  
小科_mrkj
学分:43 LV2
2010-10-26
地板
读者朋友:
    您好,首先在程序中插入断点,查看一下出错位置是button1_Click还是dataGridView1_CellClick。
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照