C# Asp.net中的事件问题

C# Asp.net中的事件问题,c#,asp.net,events,event-handling,page-lifecycle,C#,Asp.net,Events,Event Handling,Page Lifecycle,我对asp.net完全是新手,我对它有一些问题。 我为演示和学习创建了litle web表单,但遇到了一些问题。希望你能帮助我:) 我想要的是: 当我点击表中的“Kill X”按钮时,我在标签“lblMsg”中得到“youpressed button Kill X”消息。我还希望得到一个包含新数据的表 当我单击“加载”按钮时,我需要在表中获取其他行。例如,现在当页面加载时,表中有10行,当我单击“加载”时,我需要在同一个表的末尾添加10行 附言: 如果能提供一些关于如何在asp.net中处理

我对asp.net完全是新手,我对它有一些问题。 我为演示和学习创建了litle web表单,但遇到了一些问题。希望你能帮助我:)

我想要的是:

  • 当我点击表中的“Kill X”按钮时,我在标签“lblMsg”中得到“youpressed button Kill X”消息。我还希望得到一个包含新数据的表
  • 当我单击“加载”按钮时,我需要在表中获取其他行。例如,现在当页面加载时,表中有10行,当我单击“加载”时,我需要在同一个表的末尾添加10行
附言: 如果能提供一些关于如何在asp.net中处理事件的教程,我将不胜感激

下面是代码:

WebForm1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="HelpdeskOsControl.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
<asp:Panel ID="Panel1" runat="server" Height="465px" Width="417px">
    <asp:Table ID="Processes" runat="server" Height="20px" Width="400px" CssClass="tablesorter">
        <asp:TableHeaderRow ID="ProcessesHeader" runat="server" 
        TableSection="TableHeader">
            <asp:TableHeaderCell ID="TableHeaderCell1" runat="server">Name</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell2" runat="server">CPU</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell3" runat="server">Memory</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell4" runat="server"></asp:TableHeaderCell>
        </asp:TableHeaderRow>
    </asp:Table>
    <asp:Panel ID="Panel2" runat="server">
        <asp:Button ID="btnLoad" runat="server" onclick="btnLoad_Click" Text="Load" />
        <asp:Button ID="btnClear" runat="server" onclick="btnClear_Click" 
            Text="Clear" />
        <asp:Label ID="lblMsg" runat="server" Text="Label"></asp:Label>
    </asp:Panel>
</asp:Panel>
    </form>
</body>
</html> 

名称
中央处理器
记忆
WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HelpdeskOsControl
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                GenerateTable(getTestData());
        }

        private List<string> getTestData()
        {
            List<string> tData = new List<string>();
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                tData.Add("proc" + i + "_" + rand.Next(100) + "_" + rand.Next(100));
            }

            return tData;
        }

        protected void btnClear_Click(object sender, EventArgs e)
        {
            for (int i = Processes.Rows.Count; i > 1; i--)
            {
                Processes.Rows.RemoveAt(i - 1);
            }
        }

        protected void btnLoad_Click(object sender, EventArgs e)
        {
            GenerateTable(getTestData());
        }

        protected void btnKill_Click(object sender, EventArgs e)
        {
            lblMsg.Text = "You pressed button " + ((Button)sender).Text;
        }

        private void GenerateTable(List<string> list)
        {
            int st = 0;
            foreach (string line in list)
            {
                TableRow tr = new TableRow();
                Processes.Controls.Add(tr);

                foreach (String str in line.Split('_'))
                {
                    int index = tr.Cells.Add(new TableCell());
                    tr.Cells[index].Text = str;
                }

                Button b = new Button();
                b.Text = "Kill " + st;
                b.ID = "btnKill_" + st;
                b.Click += new EventHandler(btnKill_Click);
                TableCell tc = new TableCell();
                tc.Controls.Add(b);
                tr.Cells.Add(tc);

                tr.TableSection = TableRowSection.TableBody;
                st++;
            }
            Processes.BorderStyle = BorderStyle.Solid;
            Processes.GridLines = GridLines.Both;
            Processes.BorderWidth = 2;
        }

    }
}-
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
命名空间帮助桌面控制
{
公共部分类WebForm1:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
GenerateTable(getTestData());
}
私有列表getTestData()
{
List tData=新列表();
Random rand=新的Random();
对于(int i=0;i<10;i++)
{
tData.Add(“proc”+i+“”+rand.Next(100)+“”+rand.Next(100));
}
返回tData;
}
受保护的无效btnClear\u单击(对象发送方,事件参数e)
{
对于(int i=processs.Rows.Count;i>1;i--)
{
进程.Rows.RemoveAt(i-1);
}
}
受保护的void btnLoad_Click(对象发送方,事件参数e)
{
GenerateTable(getTestData());
}
受保护的无效btnKill\u单击(对象发送方,事件参数e)
{
lblMsg.Text=“您按下了按钮”+((按钮)发送者).Text;
}
私有void GenerateTable(列表)
{
int st=0;
foreach(列表中的字符串行)
{
TableRow tr=新的TableRow();
过程.控制.添加(tr);
foreach(行中的字符串str.Split(“”“))
{
int index=tr.Cells.Add(newtablecell());
tr.Cells[index].Text=str;
}
按钮b=新按钮();
b、 Text=“Kill”+st;
b、 ID=“btnKill”+st;
b、 单击+=新建事件处理程序(单击按钮);
TableCell tc=新的TableCell();
tc.控制。添加(b);
tr.Cells.Add(tc);
tr.TableSection=TableRowSection.TableBody;
st++;
}
processs.BorderStyle=BorderStyle.Solid;
processs.GridLines=GridLines.Both;
进程。边界宽度=2;
}
}
}-

两个不错的链接:


两个不错的链接:


我知道这是您第一次使用ASP.NET,我想帮助您更多地了解它的潜力

首先,我将用数据绑定替换您编写的代码,这是一种轻松构建表的方法,无需编写generateTable之类的方法。ASP.NET负责自行构建表。我将花一些时间向您演示实现这一点的完整代码,但我希望您能够抓住这个机会,在我的帮助下开始学习

按键控件为GridView。可以使用两行代码片段填充它

protected override OnLoad(EventArgs e)
{
    if (!IsPostback) DataBind();
}

protected override void OnDataBind(EventArgs e)
{
    gridView.DataSource = getTestData();
    gridView.DataBind();
}
必须首先在布局中配置列。关于GridView的文章讨论了这一点,您可以为每一行添加一个按钮

现在, 您可以将按钮设置为command按钮,这样不仅会引发Click事件,更重要的是,还会引发command事件,该事件包含一个名称和一个参数。这就是您可以注入代码的地方。比如说

<asp:Button id="btnSomething" CommandArgument="[procId]" CommandName="kill" OnCommand="myCommandHandler" />

protected void myCommandHandler(object sender, CommandEventArgs e)
{
    if (e.CommandName=="kill")
    {
        killProcess(e.CommandArgument);
        
        DataBind(); //MOST IMPORTANT
    }
}

受保护的void myCommand处理程序(对象发送方,CommandEventArgs e)
{
如果(例如,CommandName==“kill”)
{
killProcess(如CommandArgument);
DataBind();//最重要的
}
}

希望能有所帮助。这段代码是我亲手编写的,如果它不能立即运行,请理解我。

我知道这是您第一次使用ASP.NET,希望帮助您了解它的潜力

首先,我将用数据绑定替换您编写的代码,这是一种轻松构建表的方法,无需编写generateTable之类的方法。ASP.NET负责自行构建表。我将花一些时间向您演示实现这一点的完整代码,但我希望您能够抓住这个机会,在我的帮助下开始学习

按键控件为GridView。可以使用两行代码片段填充它

protected override OnLoad(EventArgs e)
{
    if (!IsPostback) DataBind();
}

protected override void OnDataBind(EventArgs e)
{
    gridView.DataSource = getTestData();
    gridView.DataBind();
}
必须首先在布局中配置列。关于GridView的文章讨论了这一点,您可以为每一行添加一个按钮

现在, 您可以将按钮设置为command按钮,这样不仅会引发Click事件,更重要的是,还会引发command事件,该事件包含一个名称和一个参数。这就是您可以注入代码的地方。比如说

<asp:Button id="btnSomething" CommandArgument="[procId]" CommandName="kill" OnCommand="myCommandHandler" />

protected void myCommandHandler(object sender, CommandEventArgs e)
{
    if (e.CommandName=="kill")
    {
        killProcess(e.CommandArgument);
        
        DataBind(); //MOST IMPORTANT
    }
}

受保护的void myCommand处理程序(对象发送方,CommandEventArgs e)
{
如果(例如,CommandName==“kill”)
{
killProcess(如CommandArgument);
DataBind();//最重要的
}
}

希望能有所帮助。我手工编写了这段代码,因此如果它不能立即工作,请理解我的意思

您需要在页面加载之间存储表的状态,并重新生成它,因为在请求之间不存储动态控件。(美国的优势)