怎样向DataTable中添加属于另一个DataTable的DataRow

怎样向DataTable中添加属于另一个DataTable的DataRow,第1张

我 们经常需要向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)

我们经常需要向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 存在很多。。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11260275.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存