在列表视图中单击按钮时绑定网格视图

本文关键字:视图 绑定 按钮 网格 单击 列表 | 更新日期: 2023-09-27 18:37:22

我有一个列表视图,每行都有一个按钮:

 <td> <asp:Button ID="Button2" runat="server" Text="select" CommandName="view" CommandArgument='<%# Eval("inquiry_id")%>'   onclick="buttonClick"/></td>

单击此按钮时,我检索单击行的 id,使用相同的 id 设置会话并绑定网格视图。这是在列表视图中单击按钮背后的代码:

ListViewItem item = (sender as Button).NamingContainer as ListViewItem;
    Button butDetails = (Button)item.FindControl("Button2");
    Int64 inquiryID = Convert.ToInt64(butDetails.CommandArgument);
    Session["session_view_id"] = inquiryID;
    this.BindGrid();               
    return;

会话在 bindGrid 函数中检索。但问题是网格视图在第一次单击时不显示,但在第二次单击时会显示,但单击了上一个 id 的数据。会话已设置,但在绑定网格时,它使用旧的会话值。绑定网格哪里出错了?bindGrid() 函数的代码是:

 int inquiryID = Convert.ToInt32(Session["session_view_id"]);
   MySqlConnection conn = null;
    try
    {          MySqlCommand cmd = new MySqlCommand("SELECT * FROM crm_support_inquiry inner join  crm_inquiry_perticipant on crm_support_inquiry.inquiry_id=?id inner join crm_mailer_types on crm_support_inquiry.mailer_id=crm_mailer_types.mailer_id limit 4", connect);
        using (MySqlDataAdapter sda = new MySqlDataAdapter())
        {
            cmd.Parameters.AddWithValue("?id", inquiryID);
            cmd.Connection = connect;
            sda.SelectCommand = cmd;
            using (DataTable dt = new DataTable())
           {
               sda.Fill(dt);
                lblComp.Text = dt.Rows[0]["company"].ToString();
                lblCname.Text = dt.Rows[0]["contact_name"].ToString();
              lblEmail.Text = dt.Rows[0]["email"].ToString();
                GridView1.DataSource = dt;
                GridView1.DataBind();
           }
        }

在列表视图中单击按钮时绑定网格视图

您是否在Page_Load方法中检查 IsPostBack?您需要将 BindGrid 调用包装在 Page_Load if(!IsPostBack) 语句,以防止Page_Load最初刷新回发时的数据。这可以防止您稍后在事件处理程序中所做的更改。

protected void Page_Load(Object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        BindGrid();
    }
}

此答案可以提供其他信息:事件处理后如何更新页面数据?