当前位置:编程学习 > C#/ASP.NET >>

十万火急,DataBinding 无法在列表中找到适合所有绑定的行

表结构   [dbo].[student](
[stuId] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[stuName] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[stuSex] [char](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[classId] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[className] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[telphone] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[stuAddress] [varchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL,
[birth] [datetime] NOT NULL,
[classTime] [datetime] NOT NULL,
[stuPwd] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[mode] [bit] NOT NULL CONSTRAINT [DF_student_mode]  DEFAULT ((0)),
-----------------------------------------------------------------------------------------------
更新的SQL语句:
update student set
       stuName=@stuName,
       stuSex=@stuSex,
       classId=@classId,
       className=@className,
       telphone=@telphone,
       stuAddress=@stuAddress,
       birth=@birth
       where stuId=@stuId
----------------------------------------------------------------------------------------
数据绑定到DataGrid的部分代码,包括查询的:
 private void MyData()
        {
            try
            {
                string strSql = String.Empty;
                DataBase.DB db = new DataBase.DB();
                SqlConnection sqlConn = db.GetSqlCon();
                if (sqlConn.State.ToString() == "Closed")
                {
                    sqlConn.Open();
                }
                    strSql = "select stuId as 学号,stuName as 姓名,stuSex as 性别,classId as 班级代码,className as 班级名称,"
                        + "telphone as 电话,stuAddress as 地址,birth as 出生日期,classTime as 入学时间 ,stuPwd as 密码 from student order by stuId asc";
                SqlDataAdapter da = new SqlDataAdapter(strSql, sqlConn);
                DataSet ds = new DataSet();
                da.Fill(ds, "student");
                if (sqlConn.State.ToString() == "Open")
                {
                    sqlConn.Close();
                }
                dstData = ds;
                MyRun();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 从内存中检索数据
        /// </summary>
        private void MyRun()
        {
            try
            {
                if (dstData != null)
                {
                    DataView dvStudent=dstData.Tables["student"].DefaultView;
                    DataTable dtStudent=dvStudent.ToTable();
                    DataView dv = dtStudent.DefaultView;
                    StringBuilder sb = new StringBuilder();
                    sb.Append("1=1 ");
                    
                    if (!string.IsNullOrEmpty(txtStuId.Text.Trim()))
                    {
                        sb.Append(string.Format("and 学号 like '%{0}%'", txtStuId.Text.Trim()));
                    }
                    if (!string.IsNullOrEmpty(txtStuName.Text.Trim()))
                    {
                        sb.Append(string.Format("and 姓名 like '%{0}%'", txtStuName.Text.Trim()));
                    }
                    if (ckbSex.Checked)
                    {
                        sb.Append(string.Format("and 性别='{0}'", cmbSex.SelectedValue));
                    }
                    if (!string.IsNullOrEmpty(txtClassName.Text.Trim()))
                    {
                        sb.Append(string.Format("and 班级名称 like '%{0}%'", txtClassName.Text.Trim()));
                    }
                    dv.RowFilter = sb.ToString();
                    bdsData.DataSource = dv.ToTable();
                    dgvStudent.DataSource = bdsData;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
---------------------------------------------------
更新时数据绑定到控件的代码:
       /// <summary>
        /// 初始化控件
        /// </summary>
        /// <param name="bds">传递的参数</param>
        private void MyData(BindingSource bds)
        {
            try
            {
                if (mode.Equals(2))
                {
                    txtStuId.Text = ((DataRowView)(bdsData.Current))["学号"].ToString();
                    txtStuName.DataBindings.Add("Text", bdsData, "姓名");
                    cmbSex.DataBindings.Add("SelectedValue", bdsData, "性别");
                    txtClassId.DataBindings.Add("Text", bdsData, "班级代码");
                    txtClassName.DataBindings.Add("Text", bdsData, "班级名称");
                    txtTelphone.DataBindings.Add("Text", bdsData, "电话");
                    txtAddress.DataBindings.Add("Text", bdsData, "地址");
                    dtpBirth.DataBindings.Add("Value", bdsData, "出生日期");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
---------------------------------------------------
以上就是我的关键代码,经过无数次的调试检查也没发现问题,更新能够正常更新,但是更新完以后 重新绑定数据时就出现异常“DataBinding 无法在列表中找到适合所有绑定的行”,有高手能够解决这个问题么,谢谢了,弄了很久都没有找到是什么原因 --------------------编程问答-------------------- 因为你表结构变了,你看看表结构是不是有变化
或者就是查出空记录了。
修改属性:AllowUserToAddRows为FALSE 可能有空记录出现 --------------------编程问答-------------------- 空行问题,参考http://www.5jsy.com/Article/15.htm --------------------编程问答-------------------- 你的问题是怎么解决的,我的也出现了类似的问题,敢问兄弟如何搞啊  --------------------编程问答-------------------- 你的问题是怎么解决的,我的也出现了类似的问题,敢问兄弟如何搞啊 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,