
DataTable dtProvider = new DataTable()
DataRow drRow = dtProvider.NewRow()
drRow[0] = txtProviderCode.Text.Trim()
drRow[1] = txtProviderName.Text.Trim()
dtProvider.Rows.Add(drRow)
大多数的情况下这几行语句是完全可以满足要求的。但 是如果想把另一个同样结构的DataTable的某一行添加到这个dtProvider中,就不能简单的添加了。否则会提示一个错误“This row belongs to another table.”。这个时候我们必须定义另一个DataRow,把源DataRow的数据赋到目的DataRow中,再Add进DataTable中就可以 了。如下所示:
DataTable dtProvider = new DataTable()
DataRow drTarget = dtProvider.NewRow()
drTarget.ItemArry = drSource.ItemArry
// 注意:这里的drSource是另一个相同结构的DataTable中的一行。
dtProvider.Rows.Add(drTarget)
我们经常需要向DataTable中添加一行数据, 大多数的情况下都是把一些从UI的控件和程序的变量中收集的数据添加到DataTable中。如以下的语句把供应商代码和名称添加到DataTable 中:
DataTable dtProvider = new DataTable()
DataRow drRow = dtProvider.NewRow()
drRow[0] = txtProviderCode.Text.Trim()
drRow[1] = txtProviderName.Text.Trim()
dtProvider.Rows.Add(drRow)
大多数的情况下这几行语句是完全可以满足要求的。但 是如果想把另一个同样结构的DataTable的某一行添加到这个dtProvider中,就不能简单的添加了。否则会提示一个错误“This row belongs to another table.”。这个时候我们必须定义另一个DataRow,把源DataRow的数据赋到目的DataRow中,再Add进DataTable中就可以 了。如下所示:
DataTable dtProvider = new DataTable()
DataRow drTarget = dtProvider.NewRow()
drTarget.ItemArry = drSource.ItemArry
// 注意:这里的drSource是另一个相同结构的DataTable中的一行。
dtProvider.Rows.Add(drTarget)
将DataRow 添加到DataTable 中报错for (int i = 0i Headdt.Rows.Counti++){
DataRow [] rows = Headdt.Select()
DataTable dt = new DataTable()
dt = rows[i].Table.Clone()
foreach (DataRow row in rows){
dt.Rows.Add(row)// 将DataRow 添加到DataTable 中
//报错 该行已经属于另一个表。}}
求解啊。。。
------解决方案--------------------------------------------------------
datarow 如果要添加到 datatable 必须和 Datatable 使用同一个 schama,否则只能用ImportRow
要获得同一架构的row 用:
------解决方案--------------------------------------------------------
你如果是为了复制数据,两行就搞定了C# code
DataTable dt = new DataTable()
dt=Headdt.Select().CopyToDataTable()
------解决方案--------------------------------------------------------
LZ 只需要改成这样就好了,测试过了。
foreach (DataRow row in rows){
dt.Rows.Add(row.ItemArray)}
------解决方案--------------------------------------------------------C# code
datatable dt=Headdt.clone //创建一个DataTable dt,字段结构复制自Headdt
dt.rows.add(Headdt.select( 找到这行记录的条件 )(0).itemarray) //在dt 中添加一行,
这行的值从Headdt 中查询出来,( 找到这行记录的条件 )这个部分可能类似于 Id=3
------解决方案--------------------------------------------------------
很明显,那个row 已经属于rows 了,所以你只要重新创建一个datarow 类型的变量,同时把
row 的值赋给这个新建变量,再利用add(新建变量)就行了
这种情况下可以使用table.ImportRow(Newrow)
public bool CheckNull() //判断各个文本框是否为空{
control = this
for( int i = 0i <control.Controls.Counti++ )
{
if( control.Controls[i].Enabled
&&((control.Controls[i] is TextBox)
||(control.Controls[i] is ComboBox))
&&(control.Controls[i].Text.Trim() == "")
&&(control.Controls[i].Tag != null) )
{
if( control.Controls[i] is TextBox &&((TextBox)control.Controls[i]).ReadOnly)
{
continue
}
MessageBox.Show((String)(control.Controls[i].Tag) + "不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information )
control.Controls[i].Text = ""
control.Controls[i].Focus()
return false
}
}
return true
}
//清除文本框内容
public void ClearContent()
{
control = this
for( int i = 0i <control.Controls.Counti++ )
{
if( ( control.Controls[i] is TextBox ))
(control.Controls[i] as TextBox ).Text = ""
else if( control.Controls[i] is ComboBox )
( control.Controls[i] as ComboBox ).SelectedIndex = -1
else if( control.Controls[i] is CheckBox )
( control.Controls[i] as CheckBox ).Checked = false
}
}
private void SetButtonStatus( bool flag )//设置“添加”“保存”按钮的切换
{
btnAdd.Visible = flag
btnSave.Visible = !flag
}
private void SetControlsEnable(bool isEnable)//使控件变为可编辑(即可以输入文字)
{
control = this
for( int i = 0i <control.Controls.Counti++)
{
if ( (control.Controls[i] is TextBox)
||(control.Controls[i] is ComboBox)
||(control.Controls[i] is PictureBox))
{
control.Controls[i].Enabled = isEnable
}
}
}
public bool ExecuteSQL(String sql)
{
SqlConnection myConnection = new SqlConnection(ConnectionString)//连接数据库
String cmdText = sql
SqlCommand myCommand = new SqlCommand(cmdText, myConnection)
myConnection.Open()
try
{
myCommand.ExecuteNonQuery()
myConnection.Close()
return true
}
catch (Exception ex)
{
myConnection.Close()
return false
}
}
public DataSet GetDataSetBySql(String sql)
{
SqlConnection myConnection = new SqlConnection(ConnectionString)//连接数据库
String cmdText = sql
SqlCommand myCommand = new SqlCommand(cmdText,myConnection)
SqlDataAdapter da = new SqlDataAdapter(cmdText, myConnection)//DataAdapter的Fill方法用于使用DataAdapte的SelectCommand的结果来填充DataSet
myConnection.Open()//打开数据库
DataSet ds = new DataSet() //DataSet对象可以保存多个数据表DataTable的查询结果,
//DataSet不一定要连接到一个数据库上,它本身是一个离线数据,
//只有在对数据库进行编辑时才需要对数据库进行连接
da.Fill(ds)
return ds
}
public void LoadStudent() //查找“学生”信息
{
sqlText = "select * from students"
dsStudent = GetDataSetBySql(sqlText)
dtStudent = dsStudent.Tables[0].Copy()
dtStudent.TableName = "student"
dgShowStudent.DataSource = dtStudent
}
public void Loadserstu(String sqlstu )//输出查找的学生信息
{
String stext=sqlstu
dsStudent = GetDataSetBySql(stext)
dtStudent = dsStudent.Tables[0].Copy()
dtStudent.TableName = "stu"
dgShowStudent.DataSource = dtStudent
}
public void LoadDept()
{
String sqlText = "select * from Department"
dsDept = GetDataSetBySql(sqlText)
dtDept = dsDept.Tables[0].Copy()
// cmbDept.DataSource = dtDept
foreach( DataRow row in dtDept.Rows )
cmbDept.Items.Add( row["Sdept"].ToString() )
}
private void CFrmInputStudent_Load(object sender, System.EventArgs e)
{
LoadStudent()
LoadDept()
SetControlsEnable(false)
btnSave.Enabled = true
}
private void btnAdd_Click(object sender, System.EventArgs e)
{
btndel.Enabled = false
btndeled.Enabled = false
btnup.Enabled = false
btnuped.Enabled = false
btnser.Enabled = false
btnsered.Enabled = false
SetControlsEnable(true)
SetButtonStatus( false )
ClearContent()
}
private void btnSave_Click(object sender, System.EventArgs e)
{
if(!CheckNull())
return
strNumber = this.tbNumber.Text.Trim()
strAge = this.tbAge.Text.Trim()
strName = this.tbName.Text.Trim()
strSex = cmbSex.SelectedItem.ToString()
strDept = cmbDept.SelectedItem.ToString()
sqlText = "insert into students (Sno,Sname,Ssex,Sage,Sdept) values ('" + strNumber + "','"
+ strName +"','"
+ strSex +"','"
+ strAge +"','"
+ strDept +"')"
bool tag = ExecuteSQL(sqlText)
if (!tag)
{
MessageBox.Show("插入失败!")
return
}
btnsered.Enabled = true
btnser.Enabled = true
btndel.Enabled = true
btndeled.Enabled = true
btnup.Enabled = true
btnuped.Enabled = true
LoadStudent()
SetButtonStatus( true )
SetControlsEnable( false)
ClearContent()
}
private void btnClose_Click(object sender, System.EventArgs e)
{
this.Close()
this.Dispose()
}
private void tbAge_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
String strAge = tbAge.Text
for( int i = 0i <strAge.Lengthi++ )
{
if( strAge[i] >= '0' &&strAge[i] <= '9')
continue
else
{
MessageBox.Show( "代码必须是数字!","错误", MessageBoxButtons.OK, MessageBoxIcon.Error )
tbAge.SelectAll()
e.Cancel = true
return
}
}
}
private void btnser_Click(object sender, EventArgs e)
{
btndeled.Enabled = false
btndel.Enabled = false
btnup.Enabled = false
btnuped.Enabled = false
btnAdd.Enabled = false
btnSave.Enabled = false
btnser.Visible = false
SetControlsEnable(true)
}
private void btnsered_Click(object sender, EventArgs e)
{
strNumber = this.tbNumber.Text.Trim()
sqlText = "select * from students where sno='" + strNumber + "' "
bool tag = ExecuteSQL(sqlText)
if (!tag)
{
MessageBox.Show("没有相关信息")
return
}
btnser.Visible = true
btnAdd.Enabled = true
btndel.Enabled = true
btndeled.Enabled = true
btnup.Enabled = true
btnuped.Enabled = true
btnser.Enabled = true
btnsered.Enabled = true
Loadserstu(sqlText)
SetControlsEnable(false)
ClearContent()
}
private void btndel_Click(object sender, EventArgs e)
{
btnup.Enabled = false
btnuped.Enabled = false
btnAdd.Enabled = false
btnSave.Enabled = false
btnser.Enabled = false
btnsered.Enabled = false
btndel.Visible = false
tbNumber.Enabled = true
}
private void btndeled_Click(object sender, EventArgs e)
{
strNumber = this.tbNumber.Text.Trim()
sqlText = "delete from students where sno='" + strNumber + "'"
MessageBox.Show("是否删除","注意!", MessageBoxButtons.YesNo)
bool tag = ExecuteSQL(sqlText)
if(!tag)
{
MessageBox.Show("删除出错!")
return
}
LoadStudent()
ClearContent()
btnAdd.Enabled = true
btnSave.Enabled = true
btnser.Enabled = true
btnsered.Enabled = true
btndel.Visible=true
tbNumber.Enabled = false
btnup.Enabled = true
btnuped.Enabled = true
}
private void btnup_Click(object sender, EventArgs e)
{
btnAdd.Enabled = false
btnSave.Enabled = false
btnser.Enabled = false
btnsered.Enabled = false
btndel.Enabled = false
btndeled.Enabled = false
btnup.Visible = false
SetControlsEnable(true)
}
private void btnuped_Click(object sender, EventArgs e)
{
if (!CheckNull())
return
strNumber = tbNumber.Text.Trim()
strName = tbName.Text.Trim()
strSex = cmbSex.SelectedItem.ToString()
strAge = tbAge.Text.Trim()
strDept = cmbDept.SelectedItem.ToString()
sqlText = "update students set sname='" + strName + "', ssex='" + strSex + "', sage='" + strAge + "',sdept='" + strDept + "'where sno='" + strNumber + "'"
bool tag = ExecuteSQL(sqlText)
if(!tag)
{
MessageBox.Show("修改出错!")
return
}
LoadStudent()
ClearContent()
SetControlsEnable(false)
btnAdd.Enabled=true
btnSave.Enabled=true
btnser.Enabled=true
btnsered.Enabled=true
btndel.Enabled=true
btndeled.Enabled=true
btnup.Visible=true
}
}
}
学生管理系统 做的不全。。 BUG 存在很多。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)