2013-02-26 69 views
0

在后面的代码中,我从数据库收集信息,然后用循环在不同的表中显示该信息。我想这样做,网站的用户可以更新每行的“用户”和“注释”字段。 Environments.aspx的asp.net - 如何成功地更新已经动态生成的gridview(或listview)?

部分:

<asp:ListView ID="ListView1" runat="server" ItemPlaceholderID="Panel1" 
        OnItemDataBound="ListView_ItemDataBound" CellSpacing="2" 
        CellPadding="2" ShowHeaderWhenEmpty="True"> 
        <LayoutTemplate> 
         <asp:Panel runat="server" ID="Panel1"></asp:Panel> 
        </LayoutTemplate> 
        <ItemTemplate> 
         <br /> 
         <%#Eval("Name") %> (Database: <%#Eval("Database") %>): 
         <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
         <ContentTemplate> 
         <asp:Timer ID="Timer1" runat="server" Interval="180000" ontick="Timer1_Tick"> 
         </asp:Timer> 
         <asp:GridView ID="GridView1" runat="server" Width="800" CellPadding="2" CellSpacing="2" AutoGenerateColumns="False" > 
          <Columns> 
           <asp:HyperLinkField DataNavigateUrlFields="LinkAddress" DataTextField="ServerName" HeaderText="Server:" Target="_blank" ItemStyle-Width="200" /> 
           <%--<asp:BoundField DataField="ServerName" HeaderText="Server:" />--%> 
           <asp:BoundField DataField="Environment" HeaderText="Environment" ItemStyle-Width="50" /> 
           <asp:BoundField DataField="Users" HeaderText="Users" ItemStyle-Width="50" /> 
           <asp:BoundField DataField="Build" HeaderText="Build" ItemStyle-Width="200" /> 
           <asp:BoundField DataField="Notes" HeaderText="Notes" /> 
           <asp:TemplateField HeaderText="Update" ItemStyle-Width="50"> 
         <EditItemTemplate> 
         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" 
          Text="Update"></asp:LinkButton> 
         <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" 
          Text="Cancel"></asp:LinkButton> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="EditRow" 
           Text="Edit" Visible='<%# PrivilegedUser() %>'></asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
          </Columns> 
         </asp:GridView> 
         </ContentTemplate> 
       </asp:UpdatePanel> 
        </ItemTemplate> 
       </asp:ListView> 

Environments.aspx.cs部分:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ListView ListView1; 
    ListView1 = (ListView)LoginView2.FindControl("ListView1"); 
    if (!IsPostBack) 
    { 
     ListView1.DataSource = Envs; 
     ListView1.DataBind(); 
    } 
} 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    ListView ListView1; 
    ListView1 = (ListView)LoginView2.FindControl("ListView1"); 
    if (!IsPostBack) 
    { 
     ListView1.DataSource = Envs; 
     ListView1.DataBind(); 
    } 
} 

protected Boolean PrivilegedUser() 
{ 
    SQLConnections SQL = new SQLConnections(); 
    bool IsPrivileged = SQL.IsUserPrivileged(); 
    return IsPrivileged; 
} 

public class Environment 
{ 
    public int EnvId { get; set; } 
    public string LineBreak { get; set; } 
    public string Name { get; set; } 
    public string Database { get; set; } 
    public List<Svrs> Svrs { get; set; } 
} 

public class Svrs 
{ 
    public int ServerId { get; set; } 
    public string ServerName { get; set; } 
    public string Environment { get; set; } 
    public string Users { get; set; } 
    public string Build { get; set; } 
    public string Notes { get; set; } 
    public string LinkAddress { get; set; } 
} 

public List<Environment> Envs 
{ 
    get 
    { 
     string[] EnvList = GetEnvs(); 
     List<string> ServerList = GetServers(); 
     string[,] DBNamesAndServers = GetDBNamesAndServers(); 
     string[] DBServers = GetDataBaseServer(DBNamesAndServers); 
     string[] DBNames = GetDataBaseName(DBNamesAndServers); 
     int num = EnvList.Count(); 
     List<Environment> CompleteEnvList = new List<Environment>(); 
     List<Environment> CompleteServerList = new List<Environment>(); 
     List<Environment> CompleteTempList = new List<Environment>(); 
     int i = 0; 
     int z = 1; 

     while(i<num) 
     { 
      string envname = EnvList[i]; 
      string dbserver = "Unknown"; 
      int index = 0; 
      if (DBNames.Contains(EnvList[i])) 
      { 
       index = Array.IndexOf(DBNames, EnvList[i]); 
       dbserver = (DBServers[index]); 
      } 
      string[,] CurServerInfo = GetSvrs(ServerList, envname); 
      List<Svrs> NewSvr = new List<Svrs>(); 
      NewSvr.AddRange(NewSvrInfo(CurServerInfo, z)); 
      Environment CurrentSvr = new Environment(); 
      Environment CurrentEnv = new Environment(); 

       CurrentSvr = new Environment 
        { 
         EnvId = i+1, 
         LineBreak = "", 
         Name = envname, 
         Database = dbserver, 
         Svrs = NewSvr, 
        }; 
       CompleteServerList.Add(CurrentSvr); 

      CompleteEnvList.AddRange(CompleteServerList); 
      i++; 
      z = z + 10; 
     } 

     return CompleteServerList; //CompleteEnvList; 
    } 
} 

此刻,当我点击 “编辑” 链接,页面只是刷新。我需要能够知道用户正在更新的行的“Environment”,“Users”和“Notes”的值,所以我可以实际更新数据库并刷新表。任何帮助将非常感激。

+0

你踩通代码..?如果是的话,哪些值不显示哪一行? – MethodMan 2013-02-26 17:54:28

+0

根据萨加的解决方案,您可以使用它们。这将是可以的,你只需要改变一些领域,..... – 2013-02-26 18:08:21

回答

0

您可以使用thisthis链接。

你要简单地改变这一切按您的要求,就是这样,你将要去实现自己的目标....