如何在现有数据表中找到datarows并更改datarow的索引?

时间:2011-10-25 08:52:47

标签: c# sql-server-2008

我有一个包含数千行的现有DataTable,想要查找行并将其设置为顶行。

3 个答案:

答案 0 :(得分:0)

您可以尝试删除并插入行

        public void MoveDataRowTo(DataRow dataRow,int destination)
        {
            DataTable parentTable = dataRow.Table;
            int rowIndex = parentTable.Rows.IndexOf(dataRow);

            if (rowIndex > 0)
            {
                DataRow newDataRow = parentTable.NewRow();

                for (int index = 0; index < dataRow.ItemArray.Length; index++)
                    newDataRow[index] = dataRow[index];

                parentTable.Rows.Remove(dataRow);   
                parentTable.Rows.InsertAt(newDataRow, destination);

                dataRow = newDataRow;
            }
        }

答案 1 :(得分:0)

我不知道你是否能够,但我可能会添加一个虚拟列来排序,在虚拟列中给出你想要更高值的行,然后按列从大到小排序使用DataView。

    private void ModifyTable(DataTable toModify)
    { //Add a column to sort by later. 
        DataColumn col = toModify.Columns.Add("DummySort", typeof(int));
        col.DefaultValue = 0;
    }
    private void SetDummyColumnValue(DataRow dr, int value)
    { //Mark the columns you want to sort to bring to the top. 
        //Give values bigger than 0! 
        dr["DummySort"] = value;
    }
    private DataTable GetSortedTable(DataTable modifiedTable)
    {
        //Sort by the column from bigger to smaller 
        DataView dv = new DataView(modifiedTable);
        dv.Sort = "DummySort DESC"; return dv.ToTable();
    }

答案 2 :(得分:0)

DataSet dsAct = new DataSet();

OleDbDataAdapter odaTem = new OleDbDataAdapter("SELECT ActivityId, Activity FROM tbl_Activity", ocnConn);

odaTem.Fill(dsAct, "Activity");

DataRow drTem;

int i = 0;

//Rows want set to be on top is in the table "TopActivity"

foreach (DataRow dr in dsAct.Tables["TopActivity"].Rows)

{

drTem = dsAct.Tables["Activity"].NewRow();

//Clone the row

drTem.ItemArray = dsAct.Tables["Activity"].Rows.Find(dr["Activity_ID"]).ItemArray;

dsAct.Tables["Activity"].Rows.RemoveAt(  dsAct.Tables["Activity"].Rows.IndexOf( dsAct.Tables["Activity"].Rows.Find(dr["Activity_ID"])));

dsAct.Tables["Activity"].Rows.InsertAt(drTem, i);

i++;

}