写如下代码,private void button2_Click(object sender, EventArgs e)
{
string cxCommand = "select * from cxsj order by cxid";
OleDbDataAdapter cxDataAdapter = new OleDbDataAdapter(cxCommand, myConnection);
cxDataAdapter.Fill(dqDataSet,"cx");
dataGridView1dataGridView1.DataBindingComplete();
dataGridView1.Columns.Clear();
dataGridView1.DataSource = dqDataSet.Tables["cx"];
dataGridView1.Columns[0].HeaderText="型号";
dataGridView1.Columns[0].Width=this.dataGridView1.Width-80;
dataGridView1[0, 0].Selected = true;
}
问题1:第一次按button2时显示正常,第二次按错误,提示 dataGridView1.Columns[0].引发了system.argumentoutofrangeexception类型异常
问题2:这样写使用datagridview对吗?感觉没有把datagridview与数据表绑在一起,选择不同行数据表的指针未动。请指点,能不能给个例子?
{
string cxCommand = "select * from cxsj order by cxid";
OleDbDataAdapter cxDataAdapter = new OleDbDataAdapter(cxCommand, myConnection);
cxDataAdapter.Fill(dqDataSet,"cx");
dataGridView1dataGridView1.DataBindingComplete();
dataGridView1.Columns.Clear();
dataGridView1.DataSource = dqDataSet.Tables["cx"];
dataGridView1.Columns[0].HeaderText="型号";
dataGridView1.Columns[0].Width=this.dataGridView1.Width-80;
dataGridView1[0, 0].Selected = true;
}
问题1:第一次按button2时显示正常,第二次按错误,提示 dataGridView1.Columns[0].引发了system.argumentoutofrangeexception类型异常
问题2:这样写使用datagridview对吗?感觉没有把datagridview与数据表绑在一起,选择不同行数据表的指针未动。请指点,能不能给个例子?
解决方案 »
- IBaitsNet查询参数问题
- 单击子窗体按钮刷新父窗体,使父窗体的数据重新绑定
- 这样的需求请大家提提意见
- 为什么ds.Tables["kkk"].Rows[0].ItemArray[0] = "unix";//原值是"linux" 赋值不成功?
- C#如何在Windows Mobile 6.0上得到手机IMSI方法
- 我想从网页上提取一些数据,并把数据存入数据库!有兴趣的过来看一下!
- DataGridViewEx扩展之合计行,增加最后一行的汇总行,支持列的聚合函数,思想碰撞才能互相提高
- webBrowser的ScrollbarEnable属性为true,但是不显示滚动条。
- TreeView的拖拉操作!
- 上哪去下C#?
- 一个错误
- wcf开放的服务地址:http://192.168.1.200:9900 ---关于下载文件的问题
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Login;public partial class ShowStudentInfo : System.Web.UI.Page
{
DropDownList ddlGradeId;
/// <summary>
/// 加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 取消编辑事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvStudents_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvStudents.EditIndex = -1;
}
/// <summary>
/// 删除事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvStudents_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
Label lblId = gvStudents.Rows[e.RowIndex].FindControl("lblId") as Label;
int stuId = Convert.ToInt32(lblId.Text);
int rowCount = StudentLogin.DeleteStuById(stuId);
if (rowCount > 0)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('删除成功')", true);
}
else {
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('删除失败')", true);
return;
}
}
/// <summary>
/// 行编辑事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvStudents_RowEditing(object sender, GridViewEditEventArgs e)
{
gvStudents.EditIndex = e.NewEditIndex;
}
/// <summary>
/// 行修改事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvStudents_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int stuId = Convert.ToInt32((gvStudents.Rows[gvStudents.EditIndex].FindControl("lblstuId") as Label).Text);
string txtStuName = (gvStudents.Rows[gvStudents.EditIndex].FindControl("txtStuName") as TextBox).Text;
int ddlGradeId = Convert.ToInt32((gvStudents.Rows[gvStudents.EditIndex].FindControl("ddlGradeId") as DropDownList).Text);
if (ddlGradeId == -1) {
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('请选择年级编号')", true);
return;
}
RadioButton rbBoy = gvStudents.Rows[gvStudents.EditIndex].FindControl("rbBoy") as RadioButton;
RadioButton rbGirl = gvStudents.Rows[gvStudents.EditIndex].FindControl("rbGril") as RadioButton;
int sex = 0;
if (rbBoy.Checked) {
sex = 1;
}
if (rbGirl.Checked) {
sex = 0;
}
int stuAge = Convert.ToInt32((gvStudents.Rows[gvStudents.EditIndex].FindControl("txtStuAge") as TextBox).Text);
string txtStuPhone = (gvStudents.Rows[gvStudents.EditIndex].FindControl("txtStuPhone") as TextBox).Text;
string txtStuEmail = (gvStudents.Rows[gvStudents.EditIndex].FindControl("txtStuEmail") as TextBox).Text;
string txtStuAddress = (gvStudents.Rows[gvStudents.EditIndex].FindControl("txtStuAddress") as TextBox).Text;
int rowCount = StudentLogin.MotiyStuById(txtStuName, sex, stuAge, ddlGradeId, txtStuPhone, txtStuEmail, txtStuAddress, stuId);
if (rowCount > 0)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('修改成功')", true);
}
gvStudents.EditIndex = -1;
}
/// <summary>
/// 分页所用事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvStudents.PageIndex = e.NewPageIndex;
}
/// <summary>
/// 预备发送事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_PreRender(object sender, EventArgs e)
{
gvStudents.DataSource = StudentLogin.GetAllStudent();
gvStudents.DataBind();
//添加一个选择项
List<Entry.Grade> grades = StudentLogin.GetAllGrade();
Entry.Grade grade = new Entry.Grade();
grade.GradeId = -1;
grade.GradeName = "请选择"; //向年级表添加一个请选择的项,它的位置是-1,值是请选择
grades.Insert(0, grade); //调用一个
//获取下拉列表里面的值
if (gvStudents.EditIndex != -1)
{
ddlGradeId = gvStudents.Rows[gvStudents.EditIndex].FindControl("ddlGradeId") as DropDownList;
ddlGradeId.DataSource = grades;
ddlGradeId.DataTextField = "gradeName";
ddlGradeId.DataValueField = "gradeId";
ddlGradeId.DataBind();
}
//增加项里面的下拉列表
DropDownList StuGradeId = ddlAddGradeId as DropDownList; //因为此下拉列表没有在gridview里面所有就直接拿
StuGradeId.DataSource = grades;
StuGradeId.DataTextField = "gradeName";
StuGradeId.DataValueField = "gradeId";
StuGradeId.DataBind(); //最后绑定下拉列表
}
/// <summary>
/// 判读是否是男
/// </summary>
/// <param name="stuSex"></param>
/// <returns></returns>
public static bool isBoy(string stuSex)
{
if (stuSex == "男")
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 判读是否是女
/// </summary>
/// <param name="stuSex"></param>
/// <returns></returns>
public static bool isGril(string stuSex)
{
if (stuSex == "男")
{
return false;
}
else
{
return true;
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
string stu_Name = (txtStuName as TextBox).Text;
string stu_Age = (txtStuAge as TextBox).Text;
int stuAge = Convert.ToInt32(stu_Age);
RadioButton rbBoys = rbBoy as RadioButton;
RadioButton rbGirls = rbGirl as RadioButton;
int stu_Sex = 0;
if (rbBoys.Checked) {
stu_Sex = 1;
}
if (rbGirls.Checked) {
stu_Sex = 0;
} string stu_Address = (txtStuAddress as TextBox).Text;
string stu_Email = (txtStuEmail as TextBox).Text;
string stu_Phone = (txtStuPhone as TextBox).Text;
DropDownList StuGradeId = ddlAddGradeId as DropDownList; //因为此下拉列表没有在gridview里面所有就直接拿
int stu_GradeId=-1;
if (StuGradeId.SelectedItem.ToString() == "S1") {
stu_GradeId = 1;
}
else if (StuGradeId.SelectedItem.ToString() == "S2") {
stu_GradeId = 2;
}
else if (StuGradeId.SelectedItem.ToString() == "Y2")
{
stu_GradeId = 3;
}
else {
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('请选择年级!')", true);
return;
}
int rowCount = StudentLogin.AddStu(stu_Name, stu_Sex, stuAge, stu_GradeId, stu_Phone, stu_Email, stu_Address);
if (rowCount > 0) {
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('增加成功!')", true);
}
}
}
yes16ws 说的不明白,能否写出来?
LMAOhuaNL 我没问清楚,不是用在WEB中。
dataGridView1.DataBindingComplete += delegate {dataGridView1.Columns.Clear();};
dataGridView1.DataSource = dqDataSet.Tables["cx"];
{
dataGridView1.DataSource=null;
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
string cxCommand = "select * from cxsj order by cxid";
OleDbDataAdapter cxDataAdapter = new OleDbDataAdapter(cxCommand, myConnection);
cxDataAdapter.Fill(cxDataSet,"cx");
dataGridView1.DataBindingComplete += delegate { this.dataGridView1.Columns.Clear(); };
dataGridView1.DataSource = cxDataSet.Tables["cx"];
dataGridView1.Columns[0].HeaderText = "型号";
dataGridView1.Columns[0].Width=this.dataGridView1.Width-80;
dataGridView1[0, 0].Selected = true;
} 问题依然存在
LZ莫非你是在Web中?很可能是PostBack问题
----------------------------
在设计器里检查下,你的datagridView是否已经绑定了事件处理程序,如果是的
那么就不要再次注册了
dataGridView1.DataBindingComplete += delegate { this.dataGridView1.Columns.Clear(); };
把清除放到那个处理方法里头去,//dataGridView1.Columns.Clear(); >>>>>>>>>>这一句你怎么还在这儿放着?注释掉
dataGridView1.DataSource = dqDataSet.Tables["cx"];
上面句执行过了,此时就会跑到DataBindingComplete事件处理方法里头去了
dataGridView1.Columns[0].HeaderText="型号"; 这一句后面的肯定会报错了(因为在此之前里面所有的列都被清空了)
dataGridView1.Columns.Add(new DataGridViewColumn(){ HeaderText = dqDataSet.Tables["cx"].Rows[0][0] as string};
后面的类似 循环来弄吧
dataGridView1.DataSource = null;
dqDataSet.clear();避免数据重复