DateTable中数据是这样的
[name] [cost]  [datetime]
张三 10     12点
张三 20     13点
李四 25     1点
张三  5     3点
王五  20    9点
我想让这个new一个DateTable,存放name列的无重复数据
想要的结果是:
[name]
张三
李四
王五
view不怎么会,最好用datetable的select帮我解决一下

解决方案 »

  1.   


    if (chkSelectInResult.Checked == false)
                {
                    DataSet ds = customInfoBll.GetCustomInfos(txtQueryCondition.Text);
                    dgvResult.DataSource = ds.Tables[0];
                }
                else
                {
                    DataTable dt = dgvResult.DataSource as DataTable;
                    if (object.Equals(dt,null))
                    {
                        return;
                    }
                    string msg = txtQueryCondition.Text;
                    string strsql = " ts_caller like '%" + msg + "%'";
                    strsql += " or Convert(ts_create_date,'System.String')   like '%" + msg + "%'";
                    strsql += " or ts_agentid like '%" + msg + "%'";
                    strsql += " or ts_customername like '%" + msg + "%'";
                    strsql += " or ts_address like '%" + msg + "%'";
                    strsql += " or ts_phone1 like '%" + msg + "%'";
                    strsql += " or ts_phone2 like '%" + msg + "%'";
                    strsql += " or ts_phone3 like '%" + msg + "%'";
                    strsql += " or ts_otherphone like '%" + msg + "%'";
                    strsql += " or ts_source like '%" + msg + "%'";
                    strsql += " or ts_status like '%" + msg + "%'";
                    strsql += " or ts_area like '%" + msg + "%'";
                    strsql += " or ts_email like '%" + msg + "%'";
                    strsql += " or ts_kind like '%" + msg + "%'";
                    strsql += " or ts_grade like '%" + msg + "%'";
                    strsql += " or ts_post like '%" + msg + "%'";
                    strsql += " or ts_fastkind like '%" + msg + "%'";
                    strsql += " or Convert(ts_addtime,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_provice,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_city,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_ordertime,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_toagentid,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_sex,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_age,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_ext,'System.String') like '%" + msg + "%'";
                    strsql += " or Convert(ts_bak,'System.String') like '%" + msg + "%'";
                    dt.DefaultView.RowFilter = strsql;
      

  2.   

    DateTable实现Distinct       #region 实现 SQL 语句中的DISCTION功能
            /// <summary>
            /// DISTINCT
            /// </summary>
            /// <param name="SourceTable"></param>
            /// <param name="FieldNames"></param>
            /// <returns></returns>
            private DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
            {
                object[] lastValues;
                DataTable newTable;
                DataRow[] orderedRows;            if (FieldNames == null || FieldNames.Length == 0)
                    throw new ArgumentNullException("FieldNames");            lastValues = new object[FieldNames.Length];
                newTable = new DataTable();            foreach (string fieldName in FieldNames)
                    newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);            orderedRows = SourceTable.Select("", string.Join(",", FieldNames));            foreach (DataRow row in orderedRows)
                {
                    if (!fieldValuesAreEqual(lastValues, row, FieldNames))
                    {
                        newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));                    setLastValues(lastValues, row, FieldNames);
                    }
                }            return newTable;
            }        private bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
            {
                bool areEqual = true;            for (int i = 0; i < fieldNames.Length; i++)
                {
                    if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
                    {
                        areEqual = false;
                        break;
                    }
                }            return areEqual;
            }        private DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
            {
                foreach (string field in fieldNames)
                    newRow[field] = sourceRow[field];            return newRow;
            }        private void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
            {
                for (int i = 0; i < fieldNames.Length; i++)
                    lastValues[i] = sourceRow[fieldNames[i]];
            }
            #endregion
      

  3.   

    用法:
    DataTable dtDtc = SelectDistinct(原始DataTable, new string[]{"name"}) // name就是你需要实现Distinct的字段名
      

  4.   

        public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
        {
            DataTable dt = new DataTable(TableName);
            dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);        object LastValue = null;
            foreach (DataRow dr in SourceTable.Select("", FieldName))
            {
                if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
                {
                    LastValue = dr[FieldName];
                    dt.Rows.Add(new object[] { LastValue });
                }
            }
            if (ds != null)
                ds.Tables.Add(dt);
            return dt;
        }
    网上找的 你试试吧
      

  5.   

    你们想的都太复杂了
    我只要2-3行的代码
    比如dataview的totable(true,)
    怎么把datatable中的某一列写到一个新的datatable中?
      

  6.   

    假设旧表为ds.table[0],新表为ds.table[1]
    for (int i=0;i<ds.table[0].count;i++)
    {
        if (ds.table[1].select("name = "+ds.table[0].row[i][0].toString()+"").toString() =="")
        {
            DataRow dr = ds.Tables[1].NewRow();
            dr["name"] = ds.Tables[0].row[i][0].toString();
            ds.Tables[1].Rows.Add(dr);
    }
    你编译下看,可能还有点问题
      

  7.   

    直接用RowFilter好像办不到,最好取数据的时候就distinct出来,程序中要想其他办法了~
      

  8.   

    2-3行代码能实现的话, 估计得到.net Framework 4.0 + N