Saya mulai mencari kategori asp yang tidak terbatas di Internet, tetapi saya hampir tidak dapat menemukan asp.net, dan yang saya temukan digabungkan dengan TreeView.
Ada beberapa kode versi asp yang ditemukan, dan ternyata semuanya menggunakan algoritma rekursif.
Struktur tabelnya adalah sebagai berikut:
Nama tabelnya adalah Nama Kelas
kunci utama id
Id kelas induk yang sesuai dengan sid
ClassName sesuai dengan nama kategori.
Cuplikan kode satu:
1 fungsi loadNextType (upid, peringkat)
2 redup
3 setel rs="pilih * dari nama kelas di mana sid="&upid
4 lakukan selagi tidak rs.eof
5 loadNextType=loadNextType &rs("ClassName")&"<br>"& string("-",peringkat) & loadNextType(rs("id"),peringkat+1)
6rs.movenext
7 putaran
Ketika fungsi 8end dipanggil: respon.write(loadNextType(0,0))
Potongan kode lainnya sama dengan prinsip di atas. Ia hanya menambahkan metode tampilan struktur pohon.
Cuplikan kode dua:
1'Tentukan klasifikasi tingkat pertama
2sub mainfl()
3 redup
4 set rs=conn.execute("pilih id,F_id,F_name dari ClassNae di mana sid=0 pesan berdasarkan id desc")
5 jika tidak rs.eof maka
6 lakukan selagi tidak rs.eof
7 respon.tulis rs(2) & "<br>"
8 panggil subfl(rs(0)," |-") 'Loop klasifikasi sub-level
9rs.movenext
10 jika rs.eof lalu keluar lakukan 'Untuk mencegah loop tak terbatas
11 putaran
12 berakhir jika
sub-13 akhir
14'Tentukan subkategori
15sub subfl(fid,strdis)
16 redup1
17 set rs1=conn.execute("pilih id,sid,Nama Kelas dari Nama Kelas di mana sid="&fid&" pesan berdasarkan id desc")
18 jika bukan rs1.eof maka
19 lakukan selagi tidak rs1.eof
20 respon.tulis rs1(2) & "<br>"
21 panggilan subfl(rs1(0)," "&strdis) 'Klasifikasi sub-level rekursif
22 rs1.bergerak selanjutnya
23 jika rs1.eof maka
24 rs1.tutup
25 pintu keluar kapal selam
26 berakhir jika
27 putaran
28 berakhir jika
sub-29 akhir
Saya mengacu pada kode di atas dan mengubahnya ke klasifikasi tak terbatas versi asp.net. Saya mulai menemui keterbatasan tata bahasa. Solusinya saat itu adalah langsung mengganti rs dengan SqlDataReader dan kemudian memodifikasinya kode):
Struktur pohon tabel dari database pengujian adalah: id, ParentID, Nama.
1 Tampilan kekosongan pribadi (string parentid/**//*, int rank*/)
2 {
3 SqlDataReader dr;
4 cmd Perintah Sql;
5 string strSQL;
6
7 strSQL = "Pilih * Dari Pohon Dimana ParentID =" + parentid + "Pesan Berdasarkan ID DESC";
8 cmd = SqlCommand baru(strSQL,sambungan);
9 //cmd.Koneksi.Buka();
10
11 menggunakan(dr = cmd.ExecuteReader())
12 {
13 sementara(dr.Baca())
14 {
15 Respon.Write(dr["Nama"].ToString() + "<br>");
16 Tampilan(dr["ID"].ToString());
17}
18}
19 cmd.Koneksi.Tutup();
20}Panggilan menggunakan Tampilan("0").
Alasan kesalahan ini adalah SqlDataReader harus ditutup setiap kali selesai digunakan, sehingga DataReader tidak dapat disarangkan.
Nanti saya ganti menggunakan DataTable untuk mencapai klasifikasi tak terbatas, namun menurut saya metode ini kurang efisien dan perlu perbaikan (masih dalam penelitian)
Kode yang dimodifikasi adalah sebagai berikut:
1 Tampilan kekosongan pribadi (string parentid, ruang String)
2 {
3 Tabel Data dt;
4 string strSQL;
5 strSQL = "Pilih * Dari Pohon Dimana ParentID =" + parentid + " Pesan Berdasarkan ID DESC";
6
7 SqlDataAdapter sda = new SqlDataAdapter(strSQL, samb);
8 Kumpulan Data ds = Kumpulan Data baru();
9 sda.Isi(ds, "Pohon");
10 dt = ds.Tabel["Pohon"];
11
12 jika (dt.Rows.Count > 0)
13 {
14 foreach (DataRow dr di dt.Rows)
15 {
16 strOpinion += spasi + "<warna font=merah>[" + dr["Nama"].ToString() +"<br>";
17 Tampilan(dr["ID"].ToString(), " " + spasi, salah);
18}
19}
20} Gunakan Display("0","↓→→") saat menelepon.
Meskipun klasifikasi tak terbatas telah dicapai, efisiensinya masih cukup rendah.
Sumber: Blog P.Dragon