2012-12-22 3 views
3

나는 asp.net/C# newbie이고 내 데이터베이스에서 생성되는 매우 간단한 메뉴를 만들려고합니다. 지금까지 데이터베이스에서 테이블을 추출하고 데이터 테이블에 그리고 거기에서 배열로 테이블을 추출했습니다.C#/asp.net을 사용하여 데이터베이스에서 하이퍼 링크 목록 표시

내 문제는 내 페이지 (사용자 유형에 따라 메뉴가 변경됨)의 루프에서 데이터를 사용하는 방법을 찾지 못했기 때문입니다. <% =Array %>을 사용해 보았지만 while/for 루프 또는 할당 라인 내부에서 사용할 수 없습니다.

어쩌면 나는이 잘못된 방식으로 공격하고 있습니다. 내 질문은 기본적으로 다음과 같습니다. 동적 페이지의 데이터베이스 (이름, URL)에서 수집 한 데이터를 어떻게 사용할 수 있습니까?

public string[] keep = new string[100]; 
public void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Response.Write("response in postback"); 
     getMenu(); 
    } 
} 

void getMenu() 
{ 
    Response.Write("response in getmenue"); 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;"; 
    con.Open(); 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 
    string sql = "Select * from Materials"; 
    SqlDataAdapter da = new SqlDataAdapter(sql, con); 
    da.Fill(ds); 
    dt = ds.Tables[0]; 
    DataRow[] drowpar = dt.Select(); 
    int i = 0; 
    foreach (DataRow dr in drowpar) 
    { 
     keep[i] = dr["Material Name"] as string; 
     i = i + 1; 
    } 

    con.Close(); 

} 

감사합니다 :

여기 뒤에 내 현재 코드입니다.

답변

3

그리드 뷰 또는 리피터와 같은 데이터 컨트롤 만 사용하면됩니다. 그런 다음 해당 컨트롤의 데이터 소스 속성에 데이터 세트를 바인딩 할 수 있습니다. 보기 중계기의 내 관점에서 여기

리피터

<asp:Repeater ID="Rept" runat="server"> 
    <HeaderTemplate> 
    <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <li><a href='<%#Eval("url") %>'><%#Eval("names") %></a></li> 
    </ItemTemplate> 
    <FooterTemplate> 
    </ul> 
    </FooterTemplate> 

을위한 마크 업이며, 여기에 데이터 세트를

Rept.DataSource = ds; 
Rept.DataBind(); 
+0

감사합니다. – Ned

1

를 결합하는 코드입니다 .. 동적 메뉴에 가장 datacontro 될 것입니다 좋은 맑은 방법은 헤더와 호환되며, UpdatePanel은 페이지 내에서 리터럴 컨트롤을 사용하여 메뉴에 렌더링하는 것입니다.

장소 페이지에서 문자 어딘가 :

<asp:Literal runat="server" ID="txtInfo" EnableViewState="false" /> 

그런 다음에 배치 한 후 StringBuilder 등을 사용하여 데이터 뒤에 코드 렌더링이 리터럴과 같이

StringBuilder sbRenderOnMe = new StringBuilder(); 

sbRenderOnMe.Append("<br> Some Text"); 

txtInfo.Text = sbRenderOnMe.ToString(); 

코드는이 될 것입니다 예 :

using(SqlConnection con = new SqlConnection()) 
{ 
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;"; 
    con.Open(); 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 
    string sql = "Select * from Materials"; 
    SqlDataAdapter da = new SqlDataAdapter(sql, con); 
    da.Fill(ds); 
    dt = ds.Tables[0]; 
    DataRow[] drowpar = dt.Select(); 

    StringBuilder sbRenderOnMe = new StringBuilder(); 
    foreach (DataRow dr in drowpar) 
    { 
    sbRenderOnMe.AppendFormat("Some Menu Names : {0}", dr["Material Name"]); 
    } 

    con.Close(); 
} 

txtInfo.Text = sbRenderOnMe.ToString(); 

일부 메모 : Response.Write은 코드의 뒤에 있기 때문에 아마 페이지의 첫 번째 바이트 앞에 쓰기 때문에. Response.Write은 출력물에 직접 쓰기가 가능합니다. - 어떤 데이터를 생성하여 페이지의 특정 위치에 두는 경우, Response.Write은 도움이되지 않습니다. 페이지에 직접 쓰기 만하기 때문에 코드에서 처리 할 수 ​​없습니다.

관련 문제