Gridview1不会在回发时更新

时间:2014-01-10 16:41:24

标签: asp.net gridview

我有一个带有以下属性的GridView

        AllowSorting="true"
        AutoGenerateColumns="false"
        BorderStyle="None"
        CellPadding="3"
        CssClass="inboundTbl"
        EnableModelValidation="True"
        PageSize="2"
        OnPageIndexChanging="GridView1_PageIndexChanging"
        OnRowDataBound="GridView1_RowDataBound"
        OnSorting="GridView1_Sorting"
        Width="100%"
        >

由于一些奇怪的原因,当我尝试某人的排序教程时,它不喜欢更新。好吧,这次我正在尝试一个过滤器教程,我真的很困惑。

这是有问题的模板字段。

            <asp:TemplateField HeaderText="Current Terminal ID" SortExpression="VUCTID">
                <HeaderTemplate>
                    Terminal:
                    <asp:DropDownList ID="ddlTerminal" runat="server"
                    AppendDataBoundItems="true"
                    AutoPostBack="true"
                    OnSelectedIndexChanged="TerminalChanged"
                    >
                        <asp:ListItem Text="ALL" Value="ALL"></asp:ListItem>
                    </asp:DropDownList>
                </HeaderTemplate>
                <ItemTemplate>
                    <%# Eval("VUCTID") %>
                </ItemTemplate>
            </asp:TemplateField>

我已经请求帮助解释为什么它不会更新,他说GridView是动态填充的,这会导致数据表返回null。我不确定那是什么意思,但我从那时起就没有收到他的消息。我也会发布过滤功能,以防问题出现在那里。

   protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack){
            ViewState["Filter"]="ALL";
            BindGridView();
            lastUpdated.Text = "Load: " + DateTime.Now;
        }
    }

protected void BindGridView()
{
    string query = @"censored";
    using (iDB2Connection conn = new iDB2Connection(connect))
    {
        using (iDB2Command cmd = new iDB2Command(query, conn))
        {
            conn.Open();
            iDB2DataAdapter da = new iDB2DataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            GridView1.DataSource = ds;
            //iDB2DataReader reader;
            //reader = cmd.ExecuteReader();
            //GridView1.DataSource = reader;
            GridView1.DataBind();
            GridView1.GridLines = GridLines.Horizontal;
            DropDownList ddlTerminal = (DropDownList)GridView1.HeaderRow.FindControl("ddlTerminal");
            this.BindTerminalList(ddlTerminal);

        }
    }
}

protected void TerminalChanged(object sender, EventArgs e)
{
    DropDownList ddlTerminal = (DropDownList)sender;
    ViewState["Filter"] = ddlTerminal.SelectedValue;
    this.BindGridView();
}

private void BindTerminalList(DropDownList ddlTerminal)
{
    string query = "censored";
    using (iDB2Connection conn = new iDB2Connection(connect))
    {
        using (iDB2Command cmd = new iDB2Command(query, conn))
        {
            conn.Open();
            iDB2DataAdapter da = new iDB2DataAdapter();
            ddlTerminal.DataSource = cmd.ExecuteReader();
            ddlTerminal.DataTextField = "VUCTID";
            ddlTerminal.DataValueField = "VUCTID";
            ddlTerminal.DataBind();
        }
        ddlTerminal.Items.FindByValue(ViewState["Filter"].ToString()).Selected = true;
    }
}
编辑:啊,对不起。通过更新我的意思是它不会过滤gridview。模板中的下拉框将从数据库中填充,一旦单击,gridview应根据所选的下拉项目进行更新和过滤。但是当我点击它时,页面将加载,但gridview看起来不受影响。

2 个答案:

答案 0 :(得分:0)

我认为您只需删除“// if(!IsPostBack){”和“//}”中的注释,您将获得所需的输出。

检查以下代码

 protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack){
    ViewState["Filter"] = "ALL";
    BindGridView();
    lastUpdated.Text = "Load: " + DateTime.Now;
    }
}
protected void BindGridView()
{
    string query = @"";
    DataTable dt = new DataTable();
    dt.Columns.Add("VUCTID");
    if(Convert.ToString(ViewState["Filter"])=="1")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 1;
    }
    if (Convert.ToString(ViewState["Filter"]) == "2")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 2;
    }
    if (Convert.ToString(ViewState["Filter"]) == "3")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 3;
    }
    if (Convert.ToString(ViewState["Filter"]) == "4")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 4;
    }
    if (Convert.ToString(ViewState["Filter"]) == "5")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 5;
    }
    if (Convert.ToString(ViewState["Filter"]) == "ALL")
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 1;
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 2;
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 3;
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 4;
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 5;
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
    GridView1.GridLines = GridLines.Horizontal;
    DropDownList ddlTerminal =   (DropDownList)GridView1.HeaderRow.FindControl("ddlTerminal");
    this.BindTerminalList(ddlTerminal);
}

protected void TerminalChanged(object sender, EventArgs e)
{
    DropDownList ddlTerminal = (DropDownList)sender;
    ViewState["Filter"] = ddlTerminal.SelectedValue.ToString();
    this.BindGridView();
}

private void BindTerminalList(DropDownList ddlTerminal)
{
    string query = "";
    DataTable dt = new DataTable();
    dt.Columns.Add("VUCTID");

    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 1;
    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 2;
    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 3;
    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 4;
    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["VUCTID"] = 5;
    ddlTerminal.DataSource = dt;
    ddlTerminal.DataTextField = "VUCTID";
    ddlTerminal.DataValueField = "VUCTID";
    ddlTerminal.DataBind();
    ddlTerminal.Items.FindByValue(ViewState["Filter"].ToString()).Selected = true;
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{

}

答案 1 :(得分:0)

对于初始回发,过滤器应为全部:

 if(!IsPostBack){
   ViewState["Filter"]="ALL";
   BindGridView();
   lastUpdated.Text = "Load: " + DateTime.Now;
}

对于其他回发,应设置过滤值。查询应相应更新。

string query = @"SELECT * FROM Table1 WHERE Terminal = '" + ViewState["Filter"] + "'";