【问题标题】:Bind HTML table on button click again再次单击按钮时绑定 HTML 表格
【发布时间】:2015-05-01 16:00:45
【问题描述】:

我的 Codebehind 中有 HTML 表格,它将在页面加载时绑定数据。

现在我有一个按钮可以将数据插入数据库。我的问题是当我在按钮单击时插入数据时,我的页面得到回发。我的 html 表格数据将只显示旧数据而不是我添加的新数据。因为 html 表首先在页面加载中绑定,然后我的控件将转到 button_click 事件。

我尝试将 ispostback 放在 page_load 上,但是当页面第一次加载时,html 表不显示任何数据。

我该如何解决这个问题。

  protected void Page_Load(object sender, EventArgs e)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "Select * from Ticket";
                conn.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                // //Building an HTML string.
                StringBuilder html = new StringBuilder();

                //Table start.

                html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
                html.Append("<THEAD>");
                html.Append("<TR>");
                html.Append("<TH>Ticket</TH>");
                html.Append("<TH>Priority</TH>");
                html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
                html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
                html.Append("<TH>Patient Name</TH>");
                html.Append("<TH>Assigned</TH>");
                html.Append("<TH>Subject</TH>");
                html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
                html.Append("</TR>");
                html.Append("</THEAD>");

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        html.Append("<tbody>");
                        html.Append("<tr>");
                        html.Append("<td>" + dr["Ticket_no"] + "</td>");
                        html.Append("<td>" + dr["Priority"] + "</td>");
                        html.Append("<td>" + dr["Status"] + "</td>");
                        html.Append("<td>" + dr["Practice_Name"] + "</td>");
                        html.Append("<td>" + dr["Patient_Name"] + "</td>");
                        html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
                        html.Append("<td>" + dr["Msg_Subject"] + "</td>");
                        html.Append("</tr>");
                        html.Append("</tbody>");
                    }
                }

                //Table end.
                html.Append("</table>");

                //Append the HTML string to Placeholder.
                PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });

                dr.Close();
                dr.Dispose();
            }

【问题讨论】:

  • 不要这样做,将数据检索到列表中并将其绑定到列表视图控件。将为您省去很多麻烦。
  • 使用SqlDataAdapter检索数据,使用Repeater、DataList或GridView显示数据

标签: c# asp.net postback


【解决方案1】:

你应该这样组织你的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        LoadData();
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    //Write data to database
    LoadData();
}

private void LoadData()
{
    using (SqlCommand cmd = new SqlCommand())
    {
        //Here goes your sql code that reads the database
    }
}

当然更好的解决方案是使用像 GridView 这样的控件并将数据直接绑定到它。

【讨论】:

    【解决方案2】:

    如果您在检查 IsPostBack 属性时在页面加载时得到空表,我认为您正在检查它的值是否为真。所以表只会在回发时加载。您应该检查 IsPostBack 属性值是否为 false 以显示仅内容页面的首次加载。

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "Select * from Ticket";
                conn.Open();
    
                SqlDataReader dr = cmd.ExecuteReader();
    
                // //Building an HTML string.
                StringBuilder html = new StringBuilder();
    
                //Table start.
    
                html.Append("<table id='tbldata' style='table-layout:fixed;' border='0'>");
                html.Append("<THEAD>");
                html.Append("<TR>");
                html.Append("<TH>Ticket</TH>");
                html.Append("<TH>Priority</TH>");
                html.Append("<TH>Status<div class='fildownarrow'></div></TH>");
                html.Append("<TH>Practice Name<div class='fildownarrow'></div></TH>");
                html.Append("<TH>Patient Name</TH>");
                html.Append("<TH>Assigned</TH>");
                html.Append("<TH>Subject</TH>");
                html.Append("<TH style='width:100px;><a href='#'><div class='filtericon'></div></a></TH>");
                html.Append("</TR>");
                html.Append("</THEAD>");
    
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        html.Append("<tbody>");
                        html.Append("<tr>");
                        html.Append("<td>" + dr["Ticket_no"] + "</td>");
                        html.Append("<td>" + dr["Priority"] + "</td>");
                        html.Append("<td>" + dr["Status"] + "</td>");
                        html.Append("<td>" + dr["Practice_Name"] + "</td>");
                        html.Append("<td>" + dr["Patient_Name"] + "</td>");
                        html.Append("<td>" + dr["Assign_User_Name"] + "</td>");
                        html.Append("<td>" + dr["Msg_Subject"] + "</td>");
                        html.Append("</tr>");
                        html.Append("</tbody>");
                    }
                }
    
                //Table end.
                html.Append("</table>");
    
                //Append the HTML string to Placeholder.
                PlaceHolder1.Controls.Add(new Literal { Text = html.ToString() });
    
                dr.Close();
                dr.Dispose();
            }
        }
    }
    

    【讨论】:

    • 这行不通。他的表是在这里创建的,这意味着它根本不会在回发时更新。
    • @Banana 哦,你是对的。好像我误解了这个问题。
    猜你喜欢
    • 2016-11-13
    • 2015-12-28
    • 2018-08-17
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多