我有一个带有以下属性的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看起来不受影响。
答案 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"] + "'";