#c# #asp.net #gridview
#c# #asp.net #gridview
Вопрос:
это мой gridview в .NET c # с нумерацией страниц
<asp:GridView ID="gvProducts" AutoGenerateColumns="False" EmptyDataText="ko" EnableViewState="true"
runat="server" DataKeyNames="ID" CssClass="mGrid" HorizontalAlign="Center"
OnRowDataBound="gvProducts_RowDataBound"
AllowPaging="True" PageSize="10"
OnPageIndexChanging="OnPageIndexChanging">
<AlternatingRowStyle CssClass="altrows" />
<Columns>
<asp:BoundField DataField="Nr" HeaderText="Nr." ReadOnly="true" HtmlEncode="false"
ItemStyle-CssClass="ddl_Class_new" ItemStyle-HorizontalAlign="Center" />
<asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:DropDownList ID="ddlstatus" runat="server" CssClass="pure-u-23-24"
AutoPostBack="true" OnSelectedIndexChanged="ddlstatus_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="/aspnet/img/bot_back_1.gif"
CommandArgument="First" CommandName="Page" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="/aspnet/img/bot_back.gif"
CommandArgument="Prev" CommandName="Page" />
Page
<asp:DropDownList ID="ddlPages" runat="server" AutoPostBack="True" CssClass="ddl_Class"
OnSelectedIndexChanged="ddlPages_SelectedIndexChanged">
</asp:DropDownList>
of
<asp:Label ID="lblPageCount" runat="server"></asp:Label>
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="/aspnet/img/bot_next.gif"
CommandArgument="Next" CommandName="Page" />
<asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="/aspnet/img/bot_next_1.gif"
CommandArgument="Last" CommandName="Page" />
</PagerTemplate>
</asp:GridView>
в этом gridview я добавил это dropdownlist ddlstatus
<asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:DropDownList ID="ddlstatus" runat="server" CssClass="pure-u-23-24"
AutoPostBack="true" OnSelectedIndexChanged="ddlstatus_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
когда dropdownlist ddlstatus
изменяется, мне нужно открыть новую веб-страницу в браузере
protected void ddlstatus_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ebb = (DropDownList)sender;
GridViewRow gvr = (GridViewRow)ebb.NamingContainer;
string dvalue = gvr.Cells[1].Text;
ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", "window.open('newpage.aspx?ID=" dvalue.ToString() "');", true);
}
но новая веб-страница в браузере также открывается, если попытаться изменить страницу в gridview
protected void ddlPages_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow gvrPager = gvProducts.BottomPagerRow;
DropDownList ddlPages = (DropDownList)gvrPager.Cells[0].FindControl("ddlPages");
gvProducts.PageIndex = ddlPages.SelectedIndex;
BindData();
}
protected void Paginate(object sender, CommandEventArgs e)
{
int intCurIndex = gvProducts.PageIndex;
switch (e.CommandArgument.ToString().ToLower())
{
case "First":
gvProducts.PageIndex = 0;
break;
case "Prev":
gvProducts.PageIndex = intCurIndex - 1;
break;
case "Next":
gvProducts.PageIndex = intCurIndex 1;
break;
case "Last":
gvProducts.PageIndex = gvProducts.PageCount - 1;
break;
}
gvProducts.DataBind();
}
protected void gvProducts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvProducts.PageIndex = e.NewPageIndex;
BindData();
}
protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvProducts.PageIndex = e.NewPageIndex;
BindData();
}
это RowDataBound event
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)
{
DropDownList ddl = (DropDownList)(e.Row.FindControl("ddlpages"));
Label lblPageCount = (Label)e.Row.FindControl("lblPageCount");
if (lblPageCount != null)
lblPageCount.Text = gvProducts.PageCount.ToString();
for (int i = 1; i <= gvProducts.PageCount; i )
{
ddl.Items.Add(i.ToString());
}
ddl.SelectedIndex = gvProducts.PageIndex;
if (gvProducts.PageIndex == 0)
{
((ImageButton)e.Row.FindControl("ImageButton1")).Visible = false;
((ImageButton)e.Row.FindControl("ImageButton2")).Visible = false;
}
if (gvProducts.PageIndex 1 == gvProducts.PageCount)
{
((ImageButton)e.Row.FindControl("ImageButton3")).Visible = false;
((ImageButton)e.Row.FindControl("ImageButton4")).Visible = false;
}
}
}
я не понимаю, почему это происходит?
как это решить?
заранее спасибо за любую помощь
Комментарии:
1. Повторно инициализируется ли ваше представление сетки при смене страниц? Спрашиваю, потому что вы заявили, что «в этом gridview я добавил этот выпадающий список ddlstatus». Если ваш выпадающий список является дочерним для grid, он получает индекс при загрузке, следовательно, ваше событие запускается. (не по теме: у вас должны быть события с одинаковым содержимым: gvProducts_PageIndexChanging и OnPageIndexChanging)
2. @nilsK Да, gridview повторно инициализируется с помощью
BindData
, когда я меняю страницы. Но я пробовал без повторной инициализации, и у меня та же проблема3. Честно говоря, в этом случае вам лучше изменить выбор droplist в JS.
4. @SalikRafiq спасибо за ответ, у вас есть какой-нибудь пример JS для моего случая?
5. посмотрите на это w3schools.com/jsref/event_onchange.asp а затем посмотрите на
window.open()