ডেটা সারণিতে সারি বাছাই করা হচ্ছে


146

আমাদের DataTableমতো একটিতে দুটি কলাম রয়েছে :

COL1   COL2
Abc    5
Def    8
Ghi    3

ক্রমহ্রাসমান ক্রমের datatableভিত্তিতে আমরা এটিকে সাজানোর চেষ্টা করছি COL2

COL1            COL2
ghi             8
abc             4
def             3
jkl             1

আমরা এটি চেষ্টা করেছি:

ft.DefaultView.Sort = "COL2 desc";
ft = ft.DefaultView.ToTable(true);

কিন্তু, একটি ব্যবহার না করে DataView, আমরা DataTableনিজেই বাছাই করতে চাই , নয় DataView

উত্তর:


355

আমি আশঙ্কা করছি আপনি সহজেই কোনও ডাটা টেবিলের অভ্যন্তরীণ সাজানোর কাজটি করতে পারবেন না যা দেখে মনে হয় আপনি করতে চান।

আপনি যা করতে পারেন তা হ'ল আপনি আপনার আসল ডেটা টেবল থেকে তৈরি ডেটাভিউ থেকে একটি নতুন ডেটাবেল তৈরি করুন। আপনি ডেটাভিউতে যা যা প্রকার এবং / বা ফিল্টার চান তা প্রয়োগ করুন এবং তারপরে ডেটাভিউ.টোটেবল পদ্ধতিটি ব্যবহার করে ডেটাভিউ থেকে একটি নতুন ডেটা টেবিল তৈরি করুন :

   DataView dv = ft.DefaultView;
   dv.Sort = "occr desc";
   DataTable sortedDT = dv.ToTable();

আমি দামের নিরিখে আরোহণের মানটি চাই যা দশমিক। এটা কিভাবে করতে হবে?
রণজিৎ কুমার নাগিরি

এই পদ্ধতির ভাল মনে হয়। তবে এটি করার কোনও প্রত্যক্ষ উপায় নেই? তাদের কেন ডেটা টেবিল.সোর্ট ("বাই") নেই?
স্টিম

28
ধন্যবাদ। এটি লক্ষণীয় যে এখানে "occr desc", "occr" হ'ল কলামের নাম, "desc" এর অর্থ "অবতরণ"।
ব্যবহারকারী 1032613

22
এটি আমার জন্য ডেটা টেবিলের জন্য কাজ করেছে। ডিফল্টভিউ.সোর্ট = "কল 1, কল 2, কল 3"। সামান্য পরিষ্কার কোড।
সাঁই

7
@ সাঁইয়ের মতোই, আপনি ডেটা টেবিলটি পরিবর্তন করতে পারেন ef ডিফল্টভিউ.সর্ট করুন সরাসরি। ভিউটি "ব্রেকআপ" করার এবং কোনও টেবিলটি পুনরায় তৈরি করার দরকার নেই।
জনি 11

40

এটি আপনাকে সহায়তা করবে ...

DataTable dt = new DataTable();         
dt.DefaultView.Sort = "Column_name desc";
dt = dt.DefaultView.ToTable();

বিখ্যাত মন সর্বদাই অন্যরকম চিন্তা করে. আমি @ জেআর এর পড়ার পরে একই সমাধান পোস্ট করতে চলেছিলাম।
ড্রু চ্যাপিন

কলাম_নেম কুজের জন্য আমি জে রিগসের সমাধানে যা ছিল তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছিলাম :)
থিম ২em

বিস্ময়কর এবং সহজ সমাধান :)
এম ফাওয়াদ সুরোষ

25

এটির সরল ব্যবহার e নির্বাচন করুন ফাংশন।

DataRow[] foundRows=table.Select("Date = '1/31/1979' or OrderID = 2", "CompanyName ASC");
DataTable dt = foundRows.CopyToDataTable();

এবং এটি হয়ে গেছে ...... শুভ কোডিং


মনে রাখবেন যদি, অপ মত, আপনি শুধুমাত্র এই বাছাই দৃষ্টিভঙ্গি আগ্রহী এবং ফলাফল ফিল্টার করতে চান না, আপনি এটা ভালো নির্দিষ্ট করতে পারেন: Select("", "CompanyName ASC")
তাওয়াব ওয়াকিল

20

নিম্নলিখিত নিম্নলিখিত সাহায্য করতে পারে:

DataRow[] dataRows = table.Select().OrderBy(u => u["EmailId"]).ToArray();

এখানে, আপনি অন্যান্য ল্যাম্বদা এক্সপ্রেশন কোয়েরিও ব্যবহার করতে পারেন।


14

আপনি Select(filterExpression, sortOrder)ডেটা টেবেলে পদ্ধতিটি ব্যবহার করার চেষ্টা করেছেন ? একটি উদাহরণের জন্য এখানে দেখুন । নোট করুন যে এই পদ্ধতিটি ডেটা টেবিলটিকে স্থানে বাছাই করবে না যদি এটি আপনি যা খুঁজছেন তবে এটি কোনও ডাটা ভিউ ব্যবহার না করে সারিগুলির একটি সাজানো অ্যারে প্রদান করবে।


13

অথবা, আপনি যদি একটি ব্যবহার করতে পারেন DataGridView, আপনি কেবল কল করতে পারেন Sort(column, direction):

namespace Sorter
{
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.dataGridView1.Rows.Add("Abc", 5);
            this.dataGridView1.Rows.Add("Def", 8);
            this.dataGridView1.Rows.Add("Ghi", 3);
            this.dataGridView1.Sort(this.dataGridView1.Columns[1], 
                                    ListSortDirection.Ascending);
        }
    }
}

যা আপনাকে কাঙ্ক্ষিত ফলাফল দেবে:

ডিবাগার দেখুন


@ বিদ্যাসাগর কোন সমস্যা নেই এছাড়াও, ভবিষ্যতের রেফারেন্সের জন্য, যদি কোনও উত্তর মূল্যবান হয় তবে আপনার এটি দেওয়া উচিত (উদাহরণস্বরূপ, আমার?)। এবং যদি কোনও উত্তর "দ্য" উত্তর হয় তবে আপনার এটি উত্তর হিসাবে চিহ্নিত করা উচিত (উদাহরণস্বরূপ, জয়ের)।
গুস্তাভো মরি

11
 table.DefaultView.Sort = "[occr] DESC";

বিদ্যা তার টেবিলটি ডেস্ক অর্ডার অনুসারে বাছাই করতে চায়। যা উপরের সাধারণ কোডটি করে। এটি কোডের এক লাইনে সম্পন্ন করা বাদে জে রিগস (স্বীকৃত উত্তর) যা দেখিয়েছিল ঠিক তা করে।
ivg

2
পরামর্শটি ছিল পোস্টটি আরও ভাল করার জন্য; ভবিষ্যতে কোড সম্পর্কিত তথ্যটি প্রতিক্রিয়াতে রাখে। কারণ এটি পোস্টটিকে কেউ উচ্চতর করে তোলা বা উত্তর হিসাবে এটি নির্বাচন করার সুযোগকে আরও ভাল করে দেয়।
gamegaMan

5

বাছাই তথ্য জন্য 2 উপায় আছে

1) কেবল ডেটা বাছাই এবং গ্রিড পূরণ করুন:

DataGridView datagridview1 = new DataGridView(); // for show data
DataTable dt1 = new DataTable(); // have data
DataTable dt2 = new DataTable(); // temp data table
DataRow[] dra = dt1.Select("", "ID DESC");
if (dra.Length > 0)
    dt2 = dra.CopyToDataTable();
datagridview1.DataSource = dt2;

2) বাছাই করা ডিফল্ট ভিউ যা গ্রিড কলামের শিরোনামের সাথে সাজানোর মতো:

DataGridView datagridview1 = new DataGridView(); // for show data
DataTable dt1 = new DataTable(); // have data
dt1.DefaultView.Sort = "ID DESC";
datagridview1.DataSource = dt1;

1
উত্তর করার জন্য ধন্যবাদ. আপনার উপায় # 1 আমার ক্ষেত্রে সহায়তা করেছে: আমি একটি বিশেষ আইসিম্পারার সংজ্ঞায়িত করেছি, তাই এটি ব্যবহার করতে আমি এই জাতীয় কিছু করেছি:DataRow[] rows = dt.Rows.Cast<DataRow>().OrderBy(row => row.Field<string>("FIELD_NAME"), MyCustomComparer.Instance).ToArray();
আলেকসেই

4

দেখা যাচ্ছে সেখানে একটি বিশেষ ক্ষেত্রে রয়েছে যেখানে এটি অর্জন করা যায়। কৌশলটি হ'ল ডেটা টেবিল তৈরি করার সময়, সমস্ত তালিকা সারিগুলিকে একটি তালিকাতে সংগ্রহ করুন, তাদের বাছাই করুন, তারপরে যুক্ত করুন। এই মামলাটি এখানে সবেমাত্র উঠে এসেছে।


3

//আশা করি এটা তোমাকে সাহায্য করবে..

        DataTable table = new DataTable();
        //DataRow[] rowArray = dataTable.Select();
        table = dataTable.Clone();
        for (int i = dataTable.Rows.Count - 1; i >= 0; i--)
        {
            table.ImportRow(dataTable.Rows[i]);
        }
        return table;

1

টি এল; ডিআর

tableObject.Select(queryExpression, sortOrderExpression)বাছাই পদ্ধতিতে ডেটা নির্বাচন করতে ব্যবহার করুন

সম্পূর্ণ উদাহরণ

সম্পূর্ণ কাজ উদাহরণ - একটি কনসোল অ্যাপ্লিকেশন পরীক্ষা করা যেতে পারে :

    using System;
    using System.Data;

    namespace A
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataTable table = new DataTable("Orders");
                table.Columns.Add("OrderID", typeof(Int32));
                table.Columns.Add("OrderQuantity", typeof(Int32));
                table.Columns.Add("CompanyName", typeof(string));
                table.Columns.Add("Date", typeof(DateTime));

                DataRow newRow = table.NewRow();
                newRow["OrderID"] = 1;
                newRow["OrderQuantity"] = 3;
                newRow["CompanyName"] = "NewCompanyName";
                newRow["Date"] = "1979, 1, 31";

                // Add the row to the rows collection.
                table.Rows.Add(newRow);

                DataRow newRow2 = table.NewRow();
                newRow2["OrderID"] = 2;
                newRow2["OrderQuantity"] = 2;
                newRow2["CompanyName"] = "NewCompanyName1";
                table.Rows.Add(newRow2);

                DataRow newRow3 = table.NewRow();
                newRow3["OrderID"] = 3;
                newRow3["OrderQuantity"] = 2;
                newRow3["CompanyName"] = "NewCompanyName2";
                table.Rows.Add(newRow3);

                DataRow[] foundRows;

                Console.WriteLine("Original table's CompanyNames");
                Console.WriteLine("************************************");
                foundRows = table.Select();

                // Print column 0 of each returned row.
                for (int i = 0; i < foundRows.Length; i++)
                    Console.WriteLine(foundRows[i][2]);

                // Presuming the DataTable has a column named Date.
                string expression = "Date = '1/31/1979' or OrderID = 2";
                // string expression = "OrderQuantity = 2 and OrderID = 2";

                // Sort descending by column named CompanyName.
                string sortOrder = "CompanyName ASC";

                Console.WriteLine("\nCompanyNames data for Date = '1/31/1979' or OrderID = 2, sorted CompanyName ASC");
                Console.WriteLine("************************************");
                // Use the Select method to find all rows matching the filter.
                foundRows = table.Select(expression, sortOrder);

                // Print column 0 of each returned row.
                for (int i = 0; i < foundRows.Length; i++)
                    Console.WriteLine(foundRows[i][2]);

                Console.ReadKey();
            }
        }
    }

আউটপুট

আউটপুট


0

এটা চেষ্টা কর:

DataTable DT = new DataTable();
DataTable sortedDT = DT;
sortedDT.Clear();
foreach (DataRow row in DT.Select("", "DiffTotal desc"))
{
    sortedDT.NewRow();
    sortedDT.Rows.Add(row);
}
DT = sortedDT;

1) আপনার অবশ্যই নতুন টেবিল তৈরি করা উচিত DataTable sortedDT = new DataTable()। 2) আপনার ব্যবহার করতে হবে ImportRow(আপনি বিভিন্ন টেবিল থেকে সারি যোগ করতে পারবেন না)
মার্বেল 82
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.