Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > ขอความกรุณา เรื่องการแสดงข้อมูลใน DataGrid เรียงข้อมูลจากน้อยไปมาก และนับข้อมูลที่ซ้ำกันครับ



 

ขอความกรุณา เรื่องการแสดงข้อมูลใน DataGrid เรียงข้อมูลจากน้อยไปมาก และนับข้อมูลที่ซ้ำกันครับ

 



Topic : 053494



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์




ผมเข้าคำถามเลยนะครับ คือผมมีข้อมูล ซึ่งอิมพอร์ตเข้าไปที่ DataGridView1 ดังนี้


92
139
498
1
1
1
1
10
12
12
27
46
46
51
67

แล้วผมต้องการ โยนข้อมูล ไปที่ DataGridView2 ให้มีผลลัพท์ดังนี้

1 4
10 1
12 2
27 1
46 2
51 1
67 1
92 1
139 1
498 1

โดยมีเงื่อนไขคือ

1.ตัวเลขที่น้อยที่สุดจะอยู่ด้านบน (เรียงลำดับจากน้อยไปมาก)

2.นับจำนวนตัวเลขที่ซ้ำกันว่ามีกี่ตัว แล้วแสดงค่าไว้ที่ Column 2

ผมได้ลองเขียน โปรแกรมด้วยตนเองแล้วครับ แต่ผลลัพท์ได้ได้ คือ ตัวเลขจะไม่เรียงลำดับจากน้อยไปมาก และ ตัวเลขที่ซ้ำกัน

จะถูกพิมพ์ ค่าซ้ำลงไป เช่น เลข 1 ก้อจะมี 4 แถวเหมือนเดิมอ่ะครับ

รบกวนผู้รู้ ช่วยผมทีนะครับ ขอบคุณมากครับ



Tag : .NET, C#, VS 2010 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-12-21 19:46:55 By : noompd View : 2653 Reply : 13
 

 

No. 1

Guest


ทำใน datatable

sort dataview ของ datatable1 แล้ว convert กลับเป็น datatable1 อย่างเดิม

สร้าง datatable2 ขึ้นมาอีกอัน แล้ว add column 2 อัน คือ data กับ count เป็น integer

วนลูป datarow ของ datatable1 โดยเป็นค่า previous กับ current row ไว้เปรียบเทียบ

ลูปแรก previous = null --> ให้เก็บค่า data ไว้ แล้ว ให้ count = 1

ต่อไปถ้า previous ไม่เท่ากับ current --> ให้เอา data และ count ใน previous มาใช้แล้ว add new row ให้กับ datatable2 จากนั้นให้เอาค่าจาก current จากแทนใน data แล้วให้ count = 1

ต่อไปถ้า previous เท่ากับ current --> ให้ data คงเดิมแต่ count + 1 แล้ววนลูปต่อไป

ทำจนหมด row จากนั้นก็เอา datatable2 ที่ได้ใหม่ ไป bind ให้ datagridview แสดงผล






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-21 20:05:05 By : ตังค์แมน
 


 

No. 2



โพสกระทู้ ( 1,348 )
บทความ ( 1 )



สถานะออฟไลน์


งานลักษณะนี้น่าจะเหมาะกับ LINQ (Language-Integrated Query)
เคยได้ยินชื่อแต่ไม่เคยนำมาใช้งาน
ไม่รู้ว่าจะใช้ LINQ กับ DataTable ได้รึเปล่า (แต่ในความรู้สึกส่วนตัว ผมคิดว่า LINQ มันเกิดมาเพื่อการนี้)
ต้องให้ผู้มีประสบการณ์กับ LINQ มาตอบ

แต่เบื้องต้น ก็ทำอย่างตังค์แมนไปก่อนล่ะกัน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 09:58:51 By : หางอึ่ง
 

 

No. 3



โพสกระทู้ ( 410 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ทำไมไม่ใช้ Group By ใน SQL ก่อนละครับ น่าจะง่ายกว่าเยอะเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 10:19:47 By : zero1150kfc
 


 

No. 4



โพสกระทู้ ( 1,348 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : zero1150kfc เมื่อวันที่ 2010-12-22 10:19:47
รายละเอียดของการตอบ ::
เดาว่าข้อมูล Import จาก Text File หรือไม่ก็ Excel

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 11:12:35 By : หางอึ่ง
 


 

No. 5



โพสกระทู้ ( 410 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

เจ้าของกระทู้ยังเงียบ ห้าๆๆๆๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 11:15:10 By : zero1150kfc
 


 

No. 6



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์


Code (C#)
 int data;
        int count;
        int dataprevious;
        int countprevious;
        //ตัวแปร
        private void button1_Click_1(object sender, EventArgs e)
        {
            int _row = dataGridView1.Rows.Count;



            DataView view = new DataView();
            view = dt.DefaultView;
            view.Sort = "f1";

            DataTable data1 = new DataTable();
            data1 = dt;

            DataTable data2 = new DataTable();
            DataColumn dc1 = new DataColumn("Data",typeof(int));
            DataColumn dc2 = new DataColumn("Count", typeof(int));

            data2.Columns.Add(dc1);
            data2.Columns.Add(dc2);

            for (int i = 0; i < _row; i++)
            {
                //
                string previous = dataGridView1.Rows[i].Cells[0].Value.ToString();
                string current = dataGridView1.Rows[i].Cells[0].Value.ToString();
                //
                if (previous == null)
                {
                    dataprevious = Convert.ToInt32(previous);
                    countprevious = 1;
                }
                if (previous != current)
                {
                    data = dataprevious;
                    count = countprevious;
                    data2.Rows.Add(data,count);
                    data = Convert.ToInt32(current);
                    count = 1;
                }

                if (previous == current)
                {
                    data = dataprevious;
                    count++;
                }
                
            }

                dataGridView2.DataSource = data2;

                int Rcount = dataGridView2.Rows.Count;
                label8.Text = Convert.ToString(Rcount);
        }


เมื่อคืนผมนั่งลองเขียนแต่ก็ ไม่ได้ผลลัพท์ดังใจ ผมเข้าใจแนวคิดของคุณตังค์แมนนะครับ

แต่ Coding ผม ไม่เอาไหนเอาซะเลย TT_TT รบกวน ช่วยแนะแนวผมด้วยนะครับ ทุกท่าน

ขอบคุณมากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 12:00:30 By : noompd
 


 

No. 7



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : หางอึ่ง เมื่อวันที่ 2010-12-22 11:12:35
รายละเอียดของการตอบ ::
ใช่ครับผม import ข้อมูลจาก excel ครับ



ประวัติการแก้ไข
2010-12-22 13:01:20
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:00:26 By : noompd
 


 

No. 8

Guest


ดีๆ อยากกด like ให้จริงๆ ฝึกเยอะๆ จะได้เก่งๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:08:58 By : ตังค์แมน
 


 

No. 9

Guest


ในลูป จาก if, if, if

ให้เปลี่ยนเป็น if, else if แทน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:12:28 By : ตังค์แมน
 


 

No. 10



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์


Code (C#)
            for (int i = 0; i < _row; i++)
            {
                string previous = dataGridView1.Rows[i].Cells[0].Value.ToString();
                for (int j = 0; j < _row; j++)
                {
                    string current = dataGridView1.Rows[j].Cells[0].Value.ToString();

                    if (previous == null)
                    {
                        dataprevious = Convert.ToInt32(previous);
                        countprevious = 1;
                    }
                    if (previous != current)
                    {
                        data = dataprevious;
                        count = countprevious;
                        data2.Rows.Add(data, count);
                        data = Convert.ToInt32(current);
                        count = 1;
                    }

                    if (previous == current)
                    {
                        data = dataprevious;
                        count++;
                    }
                }
                
            }


ผิดพลาดตรงไหนช่วยให้คำแนะนำด้วยนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:22:47 By : noompd
 


 

No. 11



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์


Code (C#)
            for (int i = 0; i < _row; i++)
            {
                //
                string previous = dataGridView1.Rows[i].Cells[0].Value.ToString();
                string current = dataGridView1.Rows[i].Cells[0].Value.ToString();

                    if (previous == null)
                    {
                        dataprevious = Convert.ToInt32(previous);
                        countprevious = 1;
                    }
                    else if (previous != current)
                    {
                        data = dataprevious;
                        count = countprevious;
                        data2.Rows.Add(data, count);
                        data = Convert.ToInt32(current);
                        count = 1;
                    }

                    if (previous == current)
                    {
                        data = dataprevious;
                        count++;
                    }
            }


ตัวนี้ลองทำตามที่ คุณตังค์แมนแนะนำครับ

ข้อมูลไม่แสดงผลครับ ต้องขอบคุณ คุณตังค์แมนนะครับที่ช่วยให้คำแนะนำ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:31:34 By : noompd
 


 

No. 12

Guest


โค้ดสด เอาไปลองดู

Code (C#)
    private void button1_Click_1(object sender, EventArgs e)
    {
        int data;
        int count;
        int dataprevious;

        DataView view = new DataView();
        view = dt.DefaultView;
        view.Sort = "f1";
        dt = view.ToTable();

        DataTable data2 = new DataTable();
        data2.Columns.Add(new DataColumn("data", typeof(int)));
        data2.Columns.Add(new DataColumn("count", typeof(int)));

        foreach(DataRow dr in dt.Rows)
        {
            data = int.Parse(dr["data"].ToString()); //<--- ตรงนี้เปลี่ยนเป็นชื่อ column ของใครของมันนะ

            if (dataprevious == null)
            {
                count = 1;
            }
            else if (dataprevious != data)
            {
                DataRow drnew = data2.NewRow();
                drnew["data"] = dataprevious;
                drnew["count"] = count;
                data2.Rows.Add(drnew);

                count = 1;
            }
            else if (dataprevious == data)
            {
                count++;
            }

            dataprevious = data;
        }

        //เก็บตก ลูปสุด้ทาย
        DataRow drr = data2.NewRow();
        drr["data"] = data;
        drr["count"] = count;
        data2.Rows.Add(drr);

        dataGridView2.DataSource = data2;

        int Rcount = dataGridView2.Rows.Count;
        label8.Text = Convert.ToString(Rcount);
    }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 13:49:13 By : ตังค์แมน
 


 

No. 13



โพสกระทู้ ( 10 )
บทความ ( 0 )



สถานะออฟไลน์


Code (C#)
            int data=0;
            int count=0;
            int dataprevious=1;

            DataView view = new DataView();
            view = dt.DefaultView;
            view.Sort = "f1";
            dt = view.ToTable();

            DataTable data2 = new DataTable();
            data2.Columns.Add(new DataColumn("data", typeof(int)));
            data2.Columns.Add(new DataColumn("count", typeof(int)));
            foreach (DataRow dr in dt.Rows)
            {
                data = int.Parse(dr["f1"].ToString());

                if (dataprevious == null)
                {
                    count = 1;
                }
                else if (dataprevious != data)
                {
                    DataRow drnew = data2.NewRow();
                    drnew["data"] = dataprevious;
                    drnew["count"] = count;
                    data2.Rows.Add(drnew);

                    count = 1;
                }
                else if (dataprevious == data)
                {
                    count++;
                }
                dataprevious = data;


ผลลัพท์ที่ได้ ตามต้องการเลยครับ

ต้องขอขอบคุณคุณตังแมนมากนะครับผม ขอบคุณจริง ๆ ครับ

ผมจะพยายามศึกษาหาความรู้เพื่อพัฒนาตนเอง ให้มากขึ้นครับ

ขอบคุณสำหรับแนวทาง และ Coding ครับ


ประวัติการแก้ไข
2010-12-22 14:20:01
2010-12-22 14:20:39
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-12-22 14:09:29 By : noompd
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอความกรุณา เรื่องการแสดงข้อมูลใน DataGrid เรียงข้อมูลจากน้อยไปมาก และนับข้อมูลที่ซ้ำกันครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่