Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: Cách phân trang, sắp xếp một file text trên ListView

  1. #1
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Smile Cách phân trang, sắp xếp một file text trên ListView

    Chào các bạn,

    Hôm nay, sau khi hoàn thành một tool dùng cho việc học tập của mình, nhờ những sự giúp đỡ của các bạn trên diễn đàn, nay mình xin trình bày một cách phân trang dữ liệu đọc từ một text-file lên ListView.

    ví dụ thực tiễn: mình có một text file với nội dung sau:

    Code:
    chuồn 1
    con bò
    con heo
    con vịt
    ...
    Nếu bây giờ có tới 10000 dòng thì việc đọc từng dòng rồi bỏ vào ListView sẽ làm chậm chương trình của bạn một cách đáng kể; và hiển thị 1000 ListViewItem lên ListView cũng không phải là cách chuyên nghiệp.

    Phần 1: PHÂN TRANG

    Trước tiên, chúng ta sẽ dùng đối tượng StreamReader cho mục đích đọc file text.

    Visual C# Code:
    1. ...
    2. string allLine;
    3.                    
    4. using (System.IO.StreamReader reader = new System.IO.StreamReader(pathToRead))
    5. {
    6.     allLine = reader.ReadToEnd();
    7. }
    8. ...

    nếu sử dụng using statement trong trường hợp này thì bạn không cần phải viết:

    Visual C# Code:
    1. reader.Close(); // mẹo (feature) trong C#

    Ý tưởng phân trang của Fox là đọc tất cả các dòng rồi chứa trong một ArrayList cha, sau đó bắt đầu phân ArrayList này thành những phần (ArrayList con). Dùng đối tượng List<ArrayList> gom 6 thằng con này vô.

    ví dụ: số dòng trong file text = 55 dòng -> chúng ta sẽ có 6 ArrayList con

    Visual C# Code:
    1. ...
    2. System.Collections.ArrayList gettingContent = this.ReadTextFileToArrayList(allLine, Convert.ToChar((int)System.Windows.Forms.Keys.Enter));
    3.                    
    4.                 System.Collections.Generic.List<System.Collections.ArrayList> pageCollection = new System.Collections.Generic.List<System.Collections.ArrayList>();
    5.                    
    6. int index = 0;
    7.                    
    8. while (index <= gettingContent.Count)
    9. {
    10.     System.Collections.ArrayList eachPage = gettingContent.GetRange(index, this.DoLimit(gettingContent.Count, index, 10));
    11.                        
    12.     pageCollection.Add(eachPage); // Gom ArrayList con vô...
    13.                        
    14.     index += 10;
    15. }
    16. ...

    Đoạn code dùng để tách nội dung một file text thành các dòng riêng biệt

    Visual C# Code:
    1. /// <summary>
    2. ///
    3. /// Splits all line(s) in a text file, then puts to an <c>System.Collections.ArrayList</c>.
    4. ///
    5. /// </summary>
    6. ///
    7. /// <param name="textfileContent">all line(s) having in a text file.</param>
    8. ///
    9. /// <param name="lineToken">token to split to each line.</param>
    10. ///
    11. /// <returns>collection of all line(s).</returns>
    12. private System.Collections.ArrayList ReadTextFileToArrayList(string textfileContent, char lineToken)
    13. {
    14.     int newpos = -1, curpos = 0;
    15.            
    16.     System.Collections.ArrayList container = new System.Collections.ArrayList();
    17.            
    18.     while (textfileContent.IndexOf(lineToken, (newpos + 1) > textfileContent.Length ? textfileContent.Length : (newpos + 1)) >= 0)
    19.     {
    20.         newpos = textfileContent.IndexOf(lineToken, (newpos + 1));
    21.                
    22.         container.Add(textfileContent.Substring(curpos, (newpos - curpos)));
    23.                
    24.         curpos = newpos += 2;
    25.     }
    26.     return container;
    27. }

    Giả sử bạn có 50 dòng thì việc phân thành 5 trang mỗi trang 10 dòng quá đơn giản. Ngược lại với 55 dòng thì bạn phải dùng đoạn code sau để lấy 5 dòng còn dư và số trang bây giờ sẽ là 6.

    Visual C# Code:
    1. /// <summary>
    2. ///
    3. /// Gets wanted number of element(s).
    4. ///
    5. /// </summary>
    6. ///
    7. /// <param name="total">total element(s).</param>
    8. ///
    9. /// <param name="offset">next index of needed element.</param>
    10. ///
    11. /// <param name="linePerPage">default number of element(s) to get</param>
    12. ///
    13. /// <returns>wanted number of element(s).</returns>
    14. private int DoLimit(int total, int offset, int linePerPage)
    15. {
    16.     return (total - offset >= linePerPage) ? linePerPage : (total - offset);
    17. }

    Bây giờ bạn đã có một đối tượng List<ArrayList> quản lý việc phân trang cho bạn rồi. Chỉ việc gọi đối tượng này và hiển thị từng trang bằng việc dùng Indexer của List<ArrayList> là ok.

    Phần 2: Sắp xếp trên ListView

    Bạn đã từng dùng WindowsExplorer khi muốn sắp xếp những file và folder (details view) bạn thường click chuột lên ColumnHeader của ListView để sắp xếp những phần tử theo thứ tự alphabet. Vậy chúng ta cũng có thể viết code cho ListView của mình được như vậy không? Rất đơn giản.

    Bước 1 trong project của bạn, hãy tạo một Class (đặt tên tùy thích) rồi bỏ đoạn code sau vào:

    Visual C# Code:
    1. public class ListViewColumnSorter : System.Collections.IComparer
    2. {
    3.         #region - field(s) -
    4.  
    5.         private int mSortingColumnIndex;
    6.  
    7.         private System.Windows.Forms.SortOrder mSortOrderEnumerator;
    8.  
    9.         private System.Collections.CaseInsensitiveComparer mObjectComparer;
    10.  
    11.         #endregion
    12.  
    13.         #region - constructor(s) -
    14.  
    15.         public ListViewColumnSorter()
    16.         {
    17.             mSortingColumnIndex = 0;
    18.  
    19.             mSortOrderEnumerator = System.Windows.Forms.SortOrder.None;
    20.  
    21.             mObjectComparer = new System.Collections.CaseInsensitiveComparer();
    22.         }
    23.  
    24.         #endregion
    25.  
    26.         #region - method(s) -
    27.  
    28.         #region - inherited from IComparer interface -
    29.  
    30.         int System.Collections.IComparer.Compare(object x, object y)
    31.         {
    32.             int result;
    33.  
    34.             System.Windows.Forms.ListViewItem itemOne, itemTwo;
    35.  
    36.             // casts the objects to be compared to ListViewItem objects.
    37.             itemOne = (System.Windows.Forms.ListViewItem)x;
    38.             itemTwo = (System.Windows.Forms.ListViewItem)y;
    39.  
    40.             // compares two items...
    41.             result = mObjectComparer.Compare(itemOne.SubItems[mSortingColumnIndex].Text, itemTwo.SubItems[mSortingColumnIndex].Text);
    42.  
    43.             // calculate correct return value based on object comparison...
    44.             if (mSortOrderEnumerator == System.Windows.Forms.SortOrder.Ascending) return result;
    45.  
    46.             else if (mSortOrderEnumerator == System.Windows.Forms.SortOrder.Descending) return (-result);
    47.  
    48.             else // equal...
    49.                 return 0;
    50.         }
    51.  
    52.         #endregion
    53.  
    54.         #endregion
    55.  
    56.         #region - property(ies) -
    57.  
    58.         public int SortingColumnIndex
    59.         {
    60.             get { return mSortingColumnIndex; }
    61.  
    62.             set { mSortingColumnIndex = value; }
    63.         }
    64.  
    65.         public System.Windows.Forms.SortOrder SortingOrder
    66.         {
    67.             get { return mSortOrderEnumerator; }
    68.  
    69.             set { mSortOrderEnumerator = value; }
    70.         }
    71.  
    72.         #endregion
    73.     }

    Bước 2: trong Form chứa ListView bạn khai báo như sau:

    Visual C# Code:
    1. // Biến toàn cục
    2. private ListViewColumnSorter mSorter;
    3.  
    4. // Constructor của Form
    5. public MainForm()
    6. {
    7.     //
    8.     // The InitializeComponent() call is required for Windows Forms designer support.
    9.     //
    10.     InitializeComponent();
    11.            
    12.     mSorter = new ListViewColumnSorter();
    13.            
    14.     listviewDetails.ListViewItemSorter = mSorter;
    15. }
    16.  
    17. // Đăng ký sự kiện ColumnClick cho ListView
    18. void ListviewDetailsColumnClick(object sender, ColumnClickEventArgs e)
    19. {
    20.     // if current clicking column is already sorted...
    21.     if (e.Column == mSorter.SortingColumnIndex)
    22.         {
    23.                if (mSorter.SortingOrder == SortOrder.Ascending)
    24.                     mSorter.SortingOrder = SortOrder.Descending;
    25.  
    26.                else mSorter.SortingOrder = SortOrder.Ascending;
    27.         }
    28.         else // sets column number that is to be sorted; default to ascending.
    29.         {
    30.                mSorter.SortingColumnIndex = e.Column;
    31.                mSorter.SortingOrder = SortOrder.Ascending;
    32.         }
    33.         listviewDetails.Sort();
    34. }

    Thế là xong

    mình có gửi kèm 2 file ZIP (một là demo, một là source).

    Chúc các bạn thực hiện thành công

    Chêer.
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi OWickedFox : 25-03-2009 lúc 11:49 PM. Lý do: Sửa hàm DoLimit(int total, int offset, int linePerPage)

  2. #2
    Ngày gia nhập
    02 2009
    Nơi ở
    HN
    Bài viết
    9

    Bài viết khá hay. Cảm ơn bạn

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    String có hàm split dùng để cắt chuỗi rồi, không cần phải viết lại đâu.
    Thay vì đọc 1 lần vào biến string, bạn nên đọc từng dòng = hàm readline rồi add dần vào ArrayList thì tốt hơn.

    Nếu mà dữ liệu lớn, thì khó lòng mà đọc hết vào memory. Bạn nên cải tiến thêm là không cần phải phân trang = cách nhấn nút tới lui, mà thay vào đó sẽ xử lý add/remove các dòng vào listview khi kéo scrollbar lên xuống. (có thể tạo riêng 1 scrollbar chẳng hạn)

  4. #4
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Cám ơn ý kiến của các bạn,

    +Đ.Khánh
    Code:
    String có hàm split dùng để cắt chuỗi rồi, không cần phải viết lại đâu.
    Thay vì đọc 1 lần vào biến string, bạn nên đọc từng dòng = hàm readline rồi add dần vào ArrayList thì tốt hơn.
    > Hàm Split() mình viết (nhờ tham khảo) là có chủ ý của nó .
    > Cũng nhờ tham khảo mình biết rằng dùng ReadLine() rùi bỏ từ từ sẽ làm chậm, nếu bỏ từng mảng vào sẽ nhanh hơn.

    Code:
    Nếu mà dữ liệu lớn, thì khó lòng mà đọc hết vào memory. Bạn nên cải tiến thêm là không cần phải phân trang = cách nhấn nút tới lui, mà thay vào đó sẽ xử lý add/remove các dòng vào listview khi kéo scrollbar lên xuống. (có thể tạo riêng 1 scrollbar chẳng hạn)
    > Do tút mình làm chỉ để quản lý những dữ liệu cỡ nhỏ thôi nên không quan tâm nhiều vào Memory .
    > Do dữ liệu nhỏ, việc phân chia các trang chứa tối đa 10 đến 20 dòng là đủ để view rồi ; nhưng mình sẽ tiềm hiểu cách của bạn, bít đâu sẽ có lúc dùng tới
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    3

    To: O'Wicked Fox
    Thanks bạn đã hướng dẫn cách chia list.

    Mình mới học đôi chút về C# và muốn làm vài thứ gần giống như bạn đã hướng dẫn:

    -Load 1 file txt (thường có dung lượng khoảng 1-5MB) với charset UTF-8 hoặc GB18030 (file txt tiếng trung)

    - Chia nhỏ file txt đó ra thành các phần nhỏ (nếu được thì số dòng có thể điền vào khi chương trình chạy)

    - Lưu các đoạn txt đã chia thành các file txt mới ở một thư mục định sẵn

    Bạn có thể hướng dẫn mình cách làm hoặc tìm tài liệu liên quan được không?

    Cám ơn bạn trước.

  6. #6
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Mặc định Cách phân trang, sắp xếp một file text trên ListView

    Trích dẫn Nguyên bản được gửi bởi Slytherin Xem bài viết
    -Load 1 file txt (thường có dung lượng khoảng 1-5MB) với charset UTF-8 hoặc GB18030 (file txt tiếng trung)
    Dung lượng 1-5Mb thì không ảnh hưởng đến việc Load; nếu máy tính của bạn có cài font tiếng Trung thì chỉ cần chỉnh Font tiếng Trung thích hợp trên ListView của bạn.

    Trích dẫn Nguyên bản được gửi bởi Slytherin Xem bài viết
    - Chia nhỏ file txt đó ra thành các phần nhỏ (nếu được thì số dòng có thể điền vào khi chương trình chạy)
    Trong hướng dẫn của mình thì bạn sẽ có một List<ArrayList> quản lý những "mẫu" nhỏ trong file text rồi. Mặc định mỗi mẫu chứa <= 10 dòng.

    Trích dẫn Nguyên bản được gửi bởi Slytherin Xem bài viết
    - Lưu các đoạn txt đã chia thành các file txt mới ở một thư mục định sẵn
    Với List<ArrayList> trên nên viết một method sau:

    Visual C# Code:
    1. public bool WriteEachPage(string path) // path này chỉ nên dừng tại một folder thôi ví dụ ...\bin\Debug
    2. {
    3.     bool result = false;
    4.  
    5.     int fileNum = 1;
    6.            
    7.     string pagename = "";
    8.            
    9.     try
    10.     {
    11.         foreach (System.Collections.ArrayList page in List<ArrayList>)
    12.         {
    13.             pagename = "page" + fileNum.ToString() +".txt"; // sinh tên file ví dụ ...\bin\Debug\page1.txt
    14.                    
    15.             using (System.IO.StreamWriter writer = new System.IO.StreamWriter(path + "\\" + pagename))
    16.             {
    17.                 foreach (object line in page) // duyệt từng dòng rồi ghi trên file.
    18.                     writer.WriteLine(line.ToString());
    19.                         }
    20.             fileNum++; // tăng biến đếm để tạo một file mới... tiếp tục lặp.
    21.         }
    22.                
    23.         result = true;
    24.     }
    25.     catch(Exception)
    26.     {
    27.         throw;
    28.     }
    29.            
    30.     return result;
    31. }

    Mình đã test trên file Text của mình thành công (có 45 trang sinh ra 45 file ) Chúc bạn thành công.
    Đã được chỉnh sửa lần cuối bởi OWickedFox : 25-03-2009 lúc 09:31 PM. Lý do: bỏ code vào tag code
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  7. #7
    Ngày gia nhập
    09 2008
    Bài viết
    7

    phân trang là một một kỹ thuật rất hay. Nhưng nếu như bạn nói là ghi khoảng 1000 item vào list view mà là chậm thì 3B có thể nói rằng không hẳn như vậy.
    Đúng là với listview cách fill dữ liệu khá chậm nhưng bù lại code cho listview rất linh động, và listview giao diện rất đẹp nên rất nhiều người ưa dùng listview.
    Thế nhưng cũng vì cách fill dữ liệu chậm mà nhiều người bỏ ko dùng listview (trong đó có 3B ). Tuy nhiên, theo mình biết nếu fill khoảng dưới 10.000 item vào listview thì tốc độ cũng ko chậm lắm. Mặt khác nếu bạn dùng phương pháp addrange thì tốc độ giảm rất nhiều. :P
    ============
    Nhưng bài viết của bạn quả rất bổ ích, thank.
    Mình cũng từng tìm hiểu một cách phân trang trên datagridview, có thời gian mình sẽ up trong topic "một vài solution với Datagridview" cũng trong chuyên mục hướng dẫn này.
    Bạn vào xem vào cho ý kiến nha

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    3

    Code:
    The Type of namespace name "ArrayList" couldnot be found (are you missing a using directive or an assembly reference ?)
    
    The name "List" doesnot exit in the current context
    Khi mình thêm method vào sau private method(s) ở file PagingTextFile.cs thì nó báo như vậy.

    Nếu thay "List<ArrayList>" bằng "System.Collections.Generic.List<System.Collection s.ArrayList>" thì nó vẫn báo lỗi.

    Phải thêm vào file nào hay chỗ nào thì mới đung?

    Mình mới học C# qua ebook nên đọc qua thì có hiểu đôi chỗ nhưng cơ bản không hiểu lắm về cả cấu trúc file, cách thêm bớt..

    À thêm nữa vì fle tx của mình tiếng trung nhưng không được save vơi encoding chuẩn, muốn hiện đúng nội dung thì phải mở với Chartset encoding là UTF-8 hoặc GB18030. Mình thử thay 1 file txt đó vào file demo (vì chuơng trình không nhận tên khác) thì nó hiện không đúng font chữ.

    Vậy nếu mình muốn ép cho chuơng trình mở file với charset là UTF-8 thì làm cách nào?

    Nếu làm một form cho chuơng trình mở 1 file nào đó rồi lấy tên file thay vào demo thì thay ở đâu?

    Khi mình thay số dòng 10 thành 50 chẳng hạn thì chuơng trình không hiện đủ 50 dòng mà chỉ hiện 10 dòng dù mình đã chỉnh lại kích thước trong mainform còn đọc file MainForm.Designer.cs thì chả hiểu gì.

    Thanks bạn.

  9. #9
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    @To 3B: Cám ơn ý kiến của bạn rất nhiều, đúng là nếu bỏ 10.000 item vào thì cũng chưa đến nổi là chậm. Ở đây, mình nói chậm là do máy tính của mình nó "yếu" quá rồi nên mới chậm. Trong code mình có dùng AddRange() mà bạn

    @To Slytherin: Đoạn code của mình chỉ là minh họa cho ý tưởng của bạn thôi, bạn đừng quá dựa hẳn vào bài code demo của mình như vậy. Hãy từ code của mình mà tìm đường đi cho bạn

    Nếu thay "List<ArrayList>" bằng "System.Collections.Generic.List<System.Collec tion s.ArrayList>" thì nó vẫn báo lỗi.
    Đây là đoạn code mình làm thực tế trên code của mình. List<ArrayList> mình ghi là để cho bạn biết là nên dùng đối tượng nào để làm việc cùng thôi. Và List<ArrayList> ở đây là biến toàn cục mPageCollection.

    Visual C# Code:
    1. public bool WriteEachPage(string path)
    2.         {
    3.             bool result = false;
    4.             int fileNum = 1;
    5.            
    6.             string pagename = "";
    7.            
    8.             try
    9.             {
    10.                 foreach (System.Collections.ArrayList page in mPageCollection)
    11.                 {
    12.                     pagename = "page" + fileNum.ToString() +".txt";
    13.                    
    14.                     using (System.IO.StreamWriter writer = new System.IO.StreamWriter(path + "\\" + pagename))
    15.                     {
    16.                         foreach (object line in page)
    17.                         {
    18.                             writer.WriteLine(line.ToString());
    19.                         }
    20.                     }
    21.                    
    22.                     fileNum++;
    23.                 }
    24.                
    25.                 result = true;
    26.             }
    27.             catch(Exception)
    28.             {
    29.                 throw;
    30.             }
    31.            
    32.             return result;
    33.         }

    đã có hàm public này rồi thì qua Form chứa ListView bạn thêm dòng code sau
    vào constructor của MainForm

    Visual C# Code:
    1. ...
    2. bool writePage = mPager.WriteEachPage(Application.StartupPath); // test cho việc ghi ra file các trang đã chia.
    3. ...

    À thêm nữa vì fle tx của mình tiếng trung nhưng không được save vơi encoding chuẩn, muốn hiện đúng nội dung thì phải mở với Chartset encoding là UTF-8 hoặc GB18030. Mình thử thay 1 file txt đó vào file demo (vì chuơng trình không nhận tên khác) thì nó hiện không đúng font chữ.
    Nó không nhận một file nào khác ngoài file demo.txt là do trong constructor của MainForm mình chỉ bắt nó đọc chính file này. Nếu muốn thay thế file để đọc bạn có 2 cách:

    1. là delete file demo.txt của mình đi và paste file text của bạn vào đổi tên nó thành demo.txt (Can thiệp bên ngoài)
    2. Bạn vào constructor của MainForm và sử code như sau

    Visual C# Code:
    1. mPager = new PagingTextFile(Application.StartupPath + "\\demo.txt", ref mResult); // thay demo.txt = tên file text tiếng Trung của bạn.

    Vậy nếu mình muốn ép cho chuơng trình mở file với charset là UTF-8 thì làm cách nào?
    Mặc định khi đọc file text thì StreamReader nó mặc định Encoding là UTF-8 rồi bạn

    Nếu làm một form cho chuơng trình mở 1 file nào đó rồi lấy tên file thay vào demo thì thay ở đâu?
    Bạn tìm hiểu về 2 đối tượng trong System.Windows.Form sau

    Code:
    FolderBrowserDialog // duyệt folder chứa tất cả các file cần mở.
    OpenFileDialog // duyệt các file cần mở.
    Khi mình thay số dòng 10 thành 50 chẳng hạn thì chuơng trình không hiện đủ 50 dòng mà chỉ hiện 10 dòng dù mình đã chỉnh lại kích thước trong mainform còn đọc file MainForm.Designer.cs thì chả hiểu gì.
    Có lẽ bạn mới học nên chưa hiểu những code phát sinh trong quá trình design form. Do MainForm mình là demo đã khóa không cho resize với mục đích chỉ cho view 1 trang 10 dòng thôi. Tuy nhiên nếu bạn nói thay 10 thành 50 thì việc Form ở đây không bị ảnh hưởng là do bạn sửa còn thiếu. Cách khắc phục là
    Vào constructor của PagingTextFile sửa tất cả số 10 thành 50 (có đến 2 chỗ lận). Khi sửa xong và chạy thì ListView nó sẽ tự có 1 ScrollBar cho bạn kéo lên xuống để view.

    Do bạn mới học nên Fox nghĩ những gì Fox nói có lẽ bạn chưa nắm hết nhưng bạn cứ cố gắng tìm hiểu nhé, không hiểu chỗ nào Fox sẽ giúp bạn (nếu có thể ).
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  10. #10
    Ngày gia nhập
    03 2009
    Bài viết
    3

    @To Fox: mình vẫn còn đang trong giai đoạn tìm hiểu ý nghĩa của các đoạn code nên khi giải quyết 1 vấn đề phát sinh thêm căn bản là khó.

    Trước mình học thêm về HTML ở trường thì nó trực quan, viết bao nhiêu dòng code trình duyệt sẽ cố hiển thị bấy nhiêu nội dung. Còn viết code cho một chương trình nào đó thì phải thành một cấu trúc hoàn chỉnh nó mới có thể chạy mặc dù chưa chắc nội dung xuất ra đúng ý.

    Để mình tìm hiểu thêm về OpenFileDialog tiếp. Cám ơn bạn đã chỉ dẫn.

Các đề tài tương tự

  1. Database Đọc File text có cấu trúc lên listview trong C#?
    Gửi bởi tntien.ecit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 17
    Bài viết cuối: 02-04-2016, 02:02 PM
  2. Save data từ Listview thành file.txt trên C#?
    Gửi bởi nhocvaly trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 13-03-2016, 10:47 AM
  3. Làm thế nào để lấy dữ liệu từ 1 trang web xác định và lưu thành file text ?
    Gửi bởi huuhung trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 03-11-2012, 07:53 PM
  4. Lập trình C cần chỉ giáo về ghi file text trên ngôn ngữ c
    Gửi bởi pengok trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 07-10-2011, 05:45 PM
  5. ADO.NET Load dữ liệu từ file.text lên listview
    Gửi bởi nguoirung1.6 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 02-09-2011, 10:50 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn