2011-03-03 7 views
0

현재 XML 문서에서 숫자와 이름을 검색하고 동적으로 테이블을 작성하여 테이블을 작성하고 있습니다. 현재 테이블이 작성되어 있으며 이름에 해당하는 숫자를 임의로 선택할지 여부를 선택하는 상자를 선택할 수 있습니다. 오름차순인지 내림차순인지를 결정하기 위해 다른 상자를 확인할 수 있어야합니다. 나는 테이블 객체에 정렬을하는 방법을 모른다. 배열로 먼저 읽은 다음 테이블에 다시 읽어야합니까?테이블을 오름차순 또는 내림차순으로 정렬하려면 어떻게해야합니까? VB.NET

XML 문서 예 :

- <roster> 
- <student> 
    <order>01</order> 
    <name>Sabrina Spark</name> 
    </student> 
- <student> 
    <order>02</order> 
    <name>Ryan Weble</name> 
    </student> 
- <student> 
    <order>03</order> 
    <name>Fredric Scott</name> 
    </student> 
- <student> 
    <order>04</order> 
    <name>Cory Snyder</name> 
    </student> 

코드 :
마크 업 :

=이 "VB"으로 AutoEventWireup는 = "false"설정은 코드 숨김이 = "Default.aspx.vb는"상속

<퍼센트 @ 페이지 언어 = 뒤에>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <link href="StyleSheet1.css" rel="Stylesheet" type = "text/css" media = "screen" /> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:CheckBox ID="Descending" runat="server" Text="Descending" /> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     <asp:CheckBox ID="ExistingOrder" runat="server" Text="Existing Order" /> 

     <br /> 
     <asp:Xml ID="Xml1" runat="server"></asp:Xml> 
     <br /> 
     <asp:XmlDataSource ID="XmlDataSource1" runat="server" 
      DataFile="~/App_Data/roster.xml" TransformFile="~/App_Data/roster.xsl"> 
     </asp:XmlDataSource> 
     <br /> 
     <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
     <br /> 
     <br /> 
     <asp:Button ID="cmdRandomize" runat="server" Height="36px" Text="Generate Table" 
      Width="127px" /> 
     <br /> 

    </div> 
    </form> 
</body> 
</html> 

코드 "itc320_presentation_order._Default"% :

Imports System.Xml 
Imports System.IO 
Partial Public Class _Default 
    Inherits System.Web.UI.Page 
    Dim rand As New Random() 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not IsPostBack Then 

     End If 
    End Sub 
    Protected Sub cmdRandomize_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdRandomize.Click 

     Dim intArl(15) As Integer 

     Dim ds As DataSet 
     Dim dr As DataRow 

     Dim tbl As New Table 

     Dim strPath As String 

     'Placehold control will hold the dynamically created table 
     PlaceHolder1.Controls.Clear() 

     'build path to data file 
     strPath = Server.MapPath("/App_Data") & "\roster.xml" 


     ds = New DataSet() 

     'load dataset object with data from xml source 
     ds.ReadXml(strPath) 

     Dim dtRoster As DataTable = ds.Tables(0) 

     'Generate table of random order ints 
     If ExistingOrder.Checked = False Then 
      genUnique(intArl, dtRoster.Rows.Count - 1) 
     Else 
      intArl = ViewState("intArl") 
     End If 


     Dim intSeq As Integer = 0 
     For Each dr In dtRoster.Rows 
      Dim tr As New TableRow 
      For intColCnt = 0 To 1 
       Dim tc As New TableCell() 
       Dim txtBox As New TextBox() 
       If intColCnt = 0 Then 
        txtBox.Text = intSeq 
       Else 
        txtBox.Text = dr(intColCnt) 
       End If 
       'Add the control to the TableCell 
       tc.Controls.Add(txtBox) 
       'Add the TableCell to the TableRow 
       tr.Cells.Add(tc) 
      Next 
      If intSeq Mod 2 Then 
       tr.CssClass = "odd" 
      Else 
       tr.CssClass = "even" 
      End If 



      tbl.Rows.Add(tr) 
      intSeq += 1 

     Next 
     PlaceHolder1.Controls.Add(tbl) 


     ViewState("intArl") = intArl 
    End Sub 
    Private Sub genUnique(ByRef intArl() As Integer, ByVal intCnt As Integer) 
     Dim intGen As Integer 
     Dim intClassCnt As Integer 
     For intClassCnt = 0 To intCnt 
regen: 
      'intGen = Int(Rnd() * 20) + 1 
      intGen = rand.Next(1, intCnt + 2) 
      If Not alreadyExists(intArl, intGen, intClassCnt) Then 
       intArl(intClassCnt) = intGen 
       Else : GoTo regen 
       End If 
     Next 
    End Sub 
    Private Function alreadyExists(ByRef intArl() As Integer, ByVal num As Integer, ByVal curr As Integer) As Boolean 
     Dim intCnt As Integer 

     'Scan the entries in the array for the existance of the newly 
     'generated number. Return True if found to already exist in the array 

     For intCnt = 0 To curr - 1 
      If num = intArl(intCnt) Then 
       Return True 
      End If 
     Next 
     Return False 
    End Function 

End Class 

답변

0

당신이 프로그램 생성이 같은 정렬 할 수 없습니다 테이블이기 때문에. 당신은 쉽게 sort your data table 수 있으며 다음 테이블을 다시 생성하십시오. 또 다른 옵션은 사용 가능한 데이터 컨트롤 중 하나 인 DataGridview를 사용하는 것입니다. 예를 들어 생성 작업을 처리하고 경우에 따라 디자이너에 정렬을 추가 할 수 있습니다.

+0

링크와 같이 구현하면 함수에 정확히 전달할 수 있습니까? 알파벳 순으로 대신 오름차순/내림차순으로 변경하는 방법을 모르겠습니다. – amazinghorse24

+0

htmllinkbutton에는 서버 측에서 처리 할 수있는 onlick이 있습니다. 두 개의 단추가 있다면 두 개의 처리기가있을 수 있으며 이해하지 못하면 아무 것도 건네 줄 필요가 없습니다. – rerun

+0

'Private Function AlphabeticSort (ByVal dtTable as DataTable, ByVal sortOrder As Integer) DataTable로 함수 머리글은 무엇입니까?하지만 내 코드에는 적용되지 않습니다. 내가해야 할 일에 적응하는 데 어려움을 겪고있다. – amazinghorse24

관련 문제