2014-01-09 4 views
0

LoginView 컨트롤에서 내 레이블 ID를 찾을 수 없습니다. 빌드하려는 것을 설명하기 위해서입니다. 로그인하지 않으면 데이터베이스의 컨텐츠 만 볼 수 있지만 로그인하면 편집 할 수 있습니다. 하지만 지금 난 그냥 데이터베이스 여기ASP.NET LoginView에서 컨트롤을 찾는 방법은 무엇입니까?

에서 데이터를 읽을 수 있도록하는 데 도움이 필요 ASP.NET 코드 숨김입니다 :

<asp:FormView runat="server" ID="viewdata"> 
    <ItemTemplate> 
     <asp:LoginView ID="LoginView1" runat="server"> 
      <AnonymousTemplate> 
       <asp:Label ID="lblLeft" runat="server"></asp:Label> 
      </AnonymousTemplate> 
      <LoggedInTemplate> 
       <asp:TextBox ID="TxBLeft" runat="server" /> 
      </LoggedInTemplate> 
     </asp:LoginView> 
    </ItemTemplate> 
</asp:FormView> 
: 여기
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Data; 

public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    { 
     using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx")) 
     { 
      connection.Open(); 

      SqlCommand cm = new SqlCommand("Select * from Content_Text", connection); 
      SqlDataReader dr; 
      dr = cm.ExecuteReader(); 
      if (dr.Read()) 
      { 

       lblLeft.text = dr["Text"].ToString(); 
      } 
     } 
    } 
} 
} 

내 ASP.NET 코드

다음 C# 코드와 함께 formview를 사용하는 것을 볼 수 있듯이 시도했지만 그 중 하나도 작동하지 않습니다. var lblLeft = (Label)viewData.FindControl("lblLeft");

+0

"작동하지 않음"에 대한 자세한 정보를 제공하십시오. 컴파일 오류가 발생합니까 (그렇다면 어떤 오류가 있습니까)? 런타임시 예외가 발생합니까? – Marshall777

+2

db에서 최대 1 행을 읽으려면 ExecuteScalar 메서드를 사용하십시오. – NoChance

+0

FormView를 사용하는 이유는 무엇입니까? – Grundy

답변

1

FormView 필요, 그래서 당신은 당신이 할 수있는 몇 content_text이있는 경우 코드

protected void Page_Load(object sender, EventArgs e) 
{ 
    { 
     using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx")) 
     { 
      connection.Open(); 

      SqlCommand cm = new SqlCommand("Select * from Content_Text", connection); 
      SqlDataReader dr; 
      dr = cm.ExecuteReader(); 
      if (dr.Read()) 
      { 
       viewdata.DataSource = new []{new { N = dr["Text"] }}; 
       viewdata.DataBind(); 

      } 
     } 
    } 
} 

및 마크 업

<asp:FormView runat="server" ID="viewdata"> 
    <ItemTemplate> 
     <asp:LoginView runat="server"> 
      <AnonymousTemplate> 
       <asp:Label ID="lblLeft" runat="server" Text='<%# Eval("N") %>'></asp:Label> 
      </AnonymousTemplate> 
      <LoggedInTemplate> 
       <asp:TextBox ID="TxBLeft" runat="server" /> 
      </LoggedInTemplate> 
     </asp:LoginView> 
    </ItemTemplate> 
</asp:FormView> 

UPDATE
이 같은 somethink 필요가 있다고 생각 이 같은 것을 시도하십시오

protected void Page_Load(object sender, EventArgs e) 
{ 
    { 
     using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx")) 
     { 
      connection.Open(); 

      SqlCommand cm = new SqlCommand("Select * from Content_Text", connection); 
      SqlDataReader dr; 
      dr = cm.ExecuteReader(); 
      List<object> ds = new List<object>(); 
      while (dr.Read()) 
      { 
       ds.Add(new { N = dr["Text"] }); 
      } 

      viewdata.DataSource = ds; 
      viewdata.DataBind(); 
     } 
    } 
} 
2

시도해보십시오.

if (dr.Read()) 
{ 
    Label lblLeft = (Label)viewData.FindControl("lblLeft") 
    lblLeft.text = dr["Text"].ToString(); 
} 
+0

레이블을 찾아 주셔서 감사합니다. 그러나 사이트를 실행할 때 여전히 오류가 발생합니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오. 예외 정보 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. –

0

당신은 그것이 FormViewItemTemplate입니다 NamingContainer의에 레이블을 찾을 필요가 : 당신이 레이블을 데이터 바인딩해야한다, 그런데

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (viewdata.CurrentMode == FormViewMode.ReadOnly) 
    { 
     LoginView lv = (LoginView)viewdata.FindControl("LoginView1"); 
     Label lblLeft = (Label)lv.FindControl("lblLeft"); 
    } 
} 

을 경우에만이 아니 다시 게시 :

if(!IsPostBack && viewdata.CurrentMode == FormViewMode.ReadOnly) 
{ 
    LoginView lv = (LoginView)viewdata.FindControl("LoginView1"); 
    Label lblLeft = (Label)lv.FindControl("lblLeft"); 
    using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx")) 
    { 
     connection.Open(); 
     using(var cm = new SqlCommand("Select TOP 1 Text from Content_Text", connection)) 
     using(SqlDataReader dr = cm.ExecuteReader()) 
     { 
      if(dr.Read()) 
      { 
       lblLeft.Text = dr.GetString(dr.GetOrdinal("Text")); 
      } 
     }  
    } 
} 
0

LoginView 컨트롤에서 다음과 같이 레이블을 찾을 수 있습니다.

데이터 소스에서은
LoginView logView = (LoginView)viewdata.FindControl("LoginView1"); 
Label lblLeft = (Label)logView.FindControl("lblLeft"); 
lblLeft.Text = "Your text goes here"; 
관련 문제