繁体   English   中英

单击事件刷新GridView

[英]Refresh GridView on click event

目前,我正在使用Webform应用程序,并使用ASPxComboBox选定值填充DevExpress网格。 我有这部分工作没问题。 但是,如果数据库中添加了任何新数据,我的要求是刷新网格,以便用户可以看到。 因此,我添加了一个按钮,并在click事件上尝试刷新数据,但网格未刷新。 如果我单步执行代码,可以看到DataTable中存在数据库的新值。 我似乎无法弄清楚是什么导致网格无法刷新。 任何帮助将不胜感激。

这就是我到目前为止

SelectedIndexChangedEvent

protected void TrainingOptions_SelectedIndexChanged(object sender, EventArgs e)
{
   ASPxComboBox ddl = (ASPxComboBox)sender;
   string[] parameters = { ddl.SelectedItem.Value.ToString() };
   TrainingGrid.DataSource = dto.PopulateTrainingData(parameters);
   TrainingGrid.DataBind();
}

ButtonClickEvent

protected void Refresh_Click(object sender, EventArgs e)
{
   string[] parameters = { TrainingOptions.SelectedItem.Value.ToString() };
   TrainingGrid.DataSource = dto.PopulateTrainingData(parameters);
   TrainingGrid.DataBind();
 }

PopulateTrainingDara

public DataTable PopulateTrainingData(params string[] parameters)
{
   //Loop through DataTable Here
   ...

   HttpContext.Current.Session["GridDT"] = mainTable;
   return mainTable;
}

数据绑定

protected void TrainingGrid_DataBinding(object sender, EventArgs e)
{
   TrainingGrid.DataSource = Session["GridDT"];
}

Page_LoadEvent

if (!IsPostBack)
{
    DataTable dropDownOptions = dto.GetTrainingData("MyQuery");

    //Add datasource to TrainingOptions dropdown
    TrainingOptions.DataSource = dropDownOptions;
    TrainingOptions.Text = "Please choose";
    TrainingOptions.TextField = "ID";
    TrainingOptions.DataBindItems();
}

标记

<dx:ASPxComboBox ID="TrainingOptions" runat="server" ValueType="System.String" OnSelectedIndexChanged="TrainingOptions_SelectedIndexChanged" CssClass="combo-box"></dx:ASPxComboBox>
<dx:ASPxGridView ID="TrainingGrid" runat="server" OnHtmlDataCellPrepared="TrainingGrid_HtmlDataCellPrepared" OnDataBinding="TrainingGrid_DataBinding"></dx:ASPxGridView>
<dx:ASPxButton ID="Refresh" runat="server" Text="Refresh" OnClick="Refresh_Click" AutoPostBack="false"></dx:ASPxButton>

注意:我没有在Page_Load事件中填充网格。

如果需要其他信息,请告诉我。

好的,所以我用DevExpress Suite的最新试用版重新创建了您的示例。 我删除了不必要的代码,这是适合我的情况的代码:

public partial class DevExpress : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dropDownOptions = new DataTable();
            dropDownOptions.Columns.Add("id");
            DataRow row = dropDownOptions.NewRow();
            row["id"] = 1;
            dropDownOptions.Rows.Add(row);
            row = dropDownOptions.NewRow();
            row["id"] = 2;
            dropDownOptions.Rows.Add(row);
            dropDownOptions.AcceptChanges();

            TrainingOptions.DataSource = dropDownOptions;
            TrainingOptions.Text = "Please choose";
            TrainingOptions.TextField = "ID";
            TrainingOptions.DataBindItems();
        }
    }

    protected void Refresh_Click(object sender, EventArgs e)
    {
        string[] parameters = { TrainingOptions.SelectedItem.Value.ToString() };
        TrainingGrid.DataSource = PopulateTrainingData(parameters);
        TrainingGrid.DataBind();
    }

    protected void TrainingOptions_SelectedIndexChanged(object sender, EventArgs e)
    {
        ASPxComboBox ddl = (ASPxComboBox)sender;
        string[] parameters = { ddl.SelectedItem.Value.ToString() };
        TrainingGrid.DataSource = PopulateTrainingData(parameters);
        TrainingGrid.DataBind();
    }

    public DataTable PopulateTrainingData(params string[] parameters)
    {
        DataTable mainTable = (DataTable)Session["GridDT"] ?? new DataTable();
        if (!mainTable.Columns.Contains("id"))
        {
            mainTable.Columns.Add("id");
        }

        DataRow row = mainTable.NewRow();
        row["id"] = parameters[0];
        mainTable.Rows.Add(row);
        mainTable.AcceptChanges();

        HttpContext.Current.Session["GridDT"] = mainTable;
        return mainTable;
    }
}

和aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="DevExpress.aspx.cs" Inherits="WebApplication1.DevExpress" %>

<%@ Register Assembly="DevExpress.Web.v15.2, Version=15.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web" TagPrefix="dx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <dx:ASPxComboBox ID="TrainingOptions" runat="server" ValueType="System.String" OnSelectedIndexChanged="TrainingOptions_SelectedIndexChanged" AutoPostBack="true" CssClass="combo-box"></dx:ASPxComboBox>
    <dx:ASPxGridView ID="TrainingGrid" runat="server"></dx:ASPxGridView>
    <dx:ASPxButton ID="Refresh" runat="server" Text="Refresh" OnClick="Refresh_Click"></dx:ASPxButton>
</asp:Content>

如果这对您不起作用,则应检查使用的是哪个版本的DevExpress控件,并在可能的情况下进行更新。 也许您正在做更多您未在此处发布的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM