[问题] 修改DataTable某列资料

楼主: srxrrr (干!我是肌董)   2015-02-11 16:58:46
我是透过将资料写入DataTable再贴上DataGridView方式来呈现表单
现在想要修改DataTable内的某row的资料
目前想到2个方法来实现此目的...
方法1(请见下面程式码):
以最基本的一列一列搜寻 在column搜寻到某值时 再修改此row后面的内容
但觉得这个方法好像很笨很不优 当资讯量大时不知会不会造成运算过久...
方法2(请见下面程式码):
想要透过DataTable.Select函数(感觉会比方法1来的快)
但目前卡在当已经以DataTable.Select函数找到某column内有要寻找的值时
却不知该如何获得该row的位置(RowIndex) 以致无法修改该row的内容
(还是根本不该透过DataTable.Select来选择)
以下为我目前的程式码:
DataTable dt = new DataTable(); //建立DataTable
private void Form1_Load(object sender, EventArgs e)
{
//设定有几行 与各行标题
dt.Columns.Add("No", Type.GetType("System.Decimal"));
dt.Columns.Add("Student");
dt.Columns.Add("Sex");
//直接设定各列内容
dt.Rows.Add("1", "LBJ", "male");
dt.Rows.Add("2", "Zoe", "female");
dt.Rows.Add("3", "Hughes", "male");
dataGridView1.DataSource = dt; //将内容贴入DGV显示出来
}
//方法1: 以传统方式判断RowIndex 再取代内值
private void buttonReplaceNormal_Click(object sender, EventArgs e)
{
for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
//当column[0]搜寻到"1"这个字时 取代其后面内容
if (dt.Rows[i][0].ToString() == "1")
{
dt.Rows[i][1] = "Anna";
dt.Rows[i][2] = "Female";
}
}
dataGridView1.DataSource = dt;//将内容贴入DGV显示出来
}
//方法2: 以DataTable.Select函数判断RowIndex 再取代内值
private void button_ReplaceSelect_Click(object sender, EventArgs e)
{
//想要将1号换一个人
DataRow[] drs = dt.Select("No=1");
if (drs.Length > 0) //有取到资料才进到这边
{
int iRowIndex;
//***关键***
//不知该如何获得所搜寻到的row的Index...
//将搜寻到
dt.Rows[iRowIndex][1] = "Anna";
dt.Rows[iRowIndex][2] = "Female";
dataGridView1.DataSource = dt; //将内容贴入DGV显示出来
}
}
想请问几个问题:
1.用"方法1"会不会耗太多时间在搜寻上(当资料量大时)
2.使用DataTable.Select函数是否可以获得特定的RowIndex?
如果可以的话 用此方法会比"方法1"来的快吗?
3.还是以上两种方法都不优 有更好的处理方式?
希望各位热心的版友们能给予我一点建议!
谢谢!!
祝大家新年快乐!!
作者: StupidGaGa (笨嘎嘎)   2015-02-11 18:25:00
有没有考虑过用LINQ?
作者: g66932007 (孤单的人)   2015-02-11 21:47:00
取资料的sql 取出一栏rownum当作datatable的SEQNO
作者: dontblame (占卜师)   2015-02-12 23:19:00
LINQ 是.NET 很棒的一项技术 不用可惜呀
作者: qileyang (YANG)   2015-02-16 00:47:00
如果搜寻的结果只会有一笔rowindex可以直接填0就好了
作者: tomex (Tomex Ou)   2015-03-01 06:09:00
先datatable.select好,修改好,再重新让dt及grid重新bind

Links booklink

Contact Us: admin [ a t ] ucptt.com