2011-06-03 79 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") %>

你的问题的范围,而只是一个侧面说明外类。 :)