2011-06-03 77 views
0

我有以下asp.net頁面如何顯示數據庫信息(evals?標籤?文本?)

<form id="form1" runat="server"> 

<asp:Button id="display_button" runat="server" Text="Display" OnClick="Button1_Click" /> &nbsp; 
<asp:Button id="edit_button" runat="server" Text="Edit" OnClick="Button2_Click" /> &nbsp; 
<asp:Button id="save_button" runat="server" Text="Save" OnClick="Button3_Click" Visible="false" /> &nbsp; 
<br /> 
<asp:Label ID="Label1" runat="server"></asp:Label> 
<br /> 

<asp:MultiView id="MultiView1" runat="server" ActiveViewIndex="0"> 
    <asp:View id="View1" runat="server"> 

     <asp:FormView id="view_program" runat="server"> 
      <ItemTemplate> 

       <tr> 
        <td class="add_border_bold" nowrap">Status</td> 
        <td width="100%" class="add_border"> 
         <img src="images/<%# Eval("status").ToString().Trim() %>_light_16.gif" alt="status" /> 
         &nbsp; 
        </td> 
       </tr> 

       <tr> 
        <td class="add_border_bold" nowrap">Short Title</td> 
        <td width="100%" class="add_border"> 
         <%# Eval("short_title") %> 
         &nbsp; 
        </td> 
       </tr> 

      </ItemTemplate> 
     </asp:FormView> 

    </asp:View> 

    <asp:View id="View2" runat="server"> 
     <asp:FormView id="edit_program" runat="server"> 

      <ItemTemplate> 
       <tr> 
        <td class="add_border_bold"nowrap">Status </td> 
        <td width="100%" class="add_border"> 
         <asp:DropDownList id="p_status" runat="server"></asp:DropDownList> 
        </td> 
       </tr> 

       <tr> 
        <td class="add_border_bold" nowrap">Short Title</td> 
        <td width="100%" class="add_border"> 
         <asp:TextBox runat="server" id="short_title" /> 
        </td> 
       </tr> 

      </ItemTemplate> 
     </asp:FormView> 

    </asp:View> 
</form> 

與頁面

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.Common; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Text; 
using System.Web; 
using System.Web.UI.WebControls; 

namespace TM_non_deploy 
{ 
    public partial class Program : System.Web.UI.Page 
    { 
     protected Label Label1; 
     protected Person myPerson; 
     protected TestProgram myProgram; 

     List<TestProgram> program = null; 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      try 
      { 
       myPerson = new Person("user"); 
       myProgram = new TestProgram("999"); 

       //needs to be done to refresh info on page 
       program = new List<TestProgram> { myProgram }; 
       view_program.DataSource = program; 
       view_program.DataBind(); 


       if (!IsPostBack) 
       { 
        //create controls and bind data 
        edit_program.DataSource = program; 
        edit_program.DataBind(); 

        DropDownList p_status = edit_program.FindControl("p_status") as DropDownList; 
        p_status.Items.Add(new ListItem("Green")); 
        p_status.Items.Add(new ListItem("Yellow")); 
        p_status.Items.Add(new ListItem("Red")); 
        p_status.SelectedValue = myProgram.Status.Trim(); 

        TextBox short_title = edit_program.FindControl("short_title") as TextBox; 
        short_title.Width = 200; 
        short_title.Text = myProgram.Short_Title.Trim(); 

       } 

      } 
      catch (Exception ex) 
      { 
       Response.Write(ex); 
       Label1.Text = ex.ToString(); 
      } 

     } 


     protected void Button1_Click(object sender, EventArgs e) 
     { 
      MultiView1.SetActiveView(View1); 
      save_button.Visible = false; 
     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 
      MultiView1.SetActiveView(View2); 
      save_button.Visible = true; 
     } 

     protected void Button3_Click(object sender, EventArgs e) 
     { 
      DropDownList c_status = edit_program.FindControl("p_status") as DropDownList; 

      myProgram.Status = c_status.SelectedValue; 

      bool update = myProgram.SaveTestProgram(); 
      if (update) 
      { 
       Label1.Text = "Saved!"; 

       //needs to be done to refresh info on page 
       program = new List<TestProgram> { myProgram }; 
       view_program.DataSource = program; 
       view_program.DataBind(); 

       MultiView1.SetActiveView(View1); 
       save_button.Visible = false; 
      } 
      else 
      { 
       Label1.Text = "Error Saving"; 
      } 
     } 

    } 
} 

基本上後面的下面的代碼,它是一個頁面都顯示這些字段,然後點擊按鈕顯示所有這些字段的可編輯版本。我的問題是,我是否應該像現在一樣顯示所有信息,並帶有evals?或者我應該切換到標籤,文字還是其他東西?我想知道,我太過遙遠,不得不撤消大量的工作。

最終會出現在這個頁面上的大量字段,所有類型從複選框到下拉到多行文本框,所以我想確保我選擇最適合顯示所有這些不同類型數據的路徑,即使在這個例子中,我只顯示小文本信息。

回答

0

除非您需要格式化或更改其他服務器端事件中的控制值,否則我不會使用ServerSide控件(標籤/文字)。他們只是添加到ViewState(除非ViewState在這些控件上被禁用)。

即將到來的是否是正確的方法,我建議您使用FormView的EditItemTemplate而不是2個FormViews在不同的視圖& MultiView Control!

0

如果你只需要顯示文字,沒有理由不只是使用<%# Eval("title") %>

有一點應該指出雖然,是它更好地施展你的DataItem並訪問屬性的方式,而不是評估和演示因爲Eval必須使用反射,並且成本更高(如果您有很多重複的東西,可能會引起注意)。

用途:用於<%# (Container.DataItem as SomeObject).Title %>代替<%# Eval("Title") %>

你的問題的範圍,而只是一個側面說明外類。 :)