Подкачка Gridview не работает
привет,у меня есть проблема с подкачкой gridview. мой пейджинговый контроль не работал. я показываю таблицу, но когда я нажимаю на вторую страницу, она не открывается. ошибка не отображается. просто когда я перехожу на вторую страницу, она не переходит на вторую страницу.
Что я уже пробовал:
это то, что я пытаюсь:
это страница aspx:
<asp:GridView ID="Gridview1" CssClass="Grid" runat="server" AutoGenerateColumns="false" Width="100%" AllowPaging="true" PageSize="10" DataKeyNames="post_id" OnRowCommand="GridView1_RowCommand" OnPageIndexChanging="Gridview1_PageIndexChanging" EnableViewState="true"> <Columns> <asp:TemplateField HeaderText="No." ItemStyle-Width ="3%"> <ItemTemplate> <asp:Label ID="lblindex" runat="server" Text='<%#Container.DataItemIndex+1 %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ItemStyle-Width ="3%" Visible="false"> <ItemTemplate> <asp:Label ID="lblnum" runat="server" Text='<%# Eval("post_id") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="job" HeaderText="Job Title" ItemStyle-Width ="16%" /> <ItemTemplate> <%# Eval("job")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" ID="txtjobtitle" Text='<%# Eval("job_title") %>'></asp:TextBox> </EditItemTemplate> </asp:TemplateField>--%> <asp:BoundField DataField="name" HeaderText="Company Name" ItemStyle-Width ="18%" /> <asp:BoundField DataField="Category" HeaderText="Job Category" ItemStyle-Width ="18%" /> <asp:BoundField DataField="description" HeaderText="Job Post Status" ItemStyle-Width ="13%"/> <asp:TemplateField HeaderText="Job Applicant" ItemStyle-Width ="11%"> <ItemTemplate> <%# "Job Opening: " + Eval("amount") %> <br /> <%# "Job Applied: "+ Eval("applied_count")%> </ItemTemplate> <EditItemTemplate> <asp:Label runat="server" ID="lbljobstatus" Text='<%# "Job Opening: " + Eval("amount").ToString() +", Job Applied: "+ Eval("applied_count").ToString()%>'></asp:Label> </EditItemTemplate> </asp:TemplateField> <asp:ButtonField CommandName="editRecord" ButtonType="Link" Text="Edit" ItemStyle-Width="4%" ControlStyle-CssClass="text-rose"> </asp:ButtonField> <asp:TemplateField ItemStyle-Width="9%"> <ItemTemplate> <asp:CheckBox ID="myCheckBox1" runat="server" Text="Suspended" Checked='<%# Eval("suspend") == DBNull.Value ? false : Convert.ToBoolean(Eval("suspend")) %>' OnCheckedChanged="myCheckBox1_CheckedChanged" AutoPostBack="true"/> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ItemStyle-Width="8%"> <ItemTemplate> <asp:CheckBox ID="myCheckBox2" runat="server" Text="Featured" Checked='<%# Eval("is_feat") == DBNull.Value ? false : Convert.ToBoolean(Eval("is_feat")) %>' OnCheckedChanged="myCheckBox2_CheckedChanged1" AutoPostBack="true"/> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Таблица BindGridView, которая предназначена для отображения списка данных:
private void BindGridView() { MySqlConnection con = new MySqlConnection(constr); MySqlCommand cmd = new MySqlCommand("SELECT jpw.jpw_id, jpw.post_id, GROUP_CONCAT(jpw.job_title SEPARATOR ', ') as job, " + "ub.name,cat.name as 'Category',jpp.description,sum(jpw.amount) as amount, " + "sum(jpw.applied_count) as applied_count, jpw.suspend, jp.is_feat " + "FROM xtime.job_post_worker jpw " + "left join job_post jp on jpw.post_id = jp.post_id " + "left join users_business ub on jp.ub_id = ub.ub_id " + "left join job_post_processing jpp on jp.status = jpp.status " + "left join category cat on jp.category = cat.cat_id " + "GROUP BY jpw.post_id " + "ORDER BY jpw.jpw_id ASC;", con); MySqlDataAdapter da = new MySqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); Gridview1.DataSource = dt; Gridview1.DataBind(); }
Тогда это мой индекс страницы gridview. во-первых, я попробовал тот, который я прокомментировал, но я не знаю, что он не работает, в то время как другие работают, и я попробовал второй, но он тоже не работает:
protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e) { //Gridview1.PageIndex = e.NewPageIndex; //BindGridView(); Gridview1.PageIndex = e.NewPageIndex; Gridview1.SelectedIndex = -1; BindGridView(); }
п/с: помогите мне, пожалуйста. совершенно не знаю, в чем проблема и как ее решить. спасибо :)
Graeme_Grant
"не работать". Как? Что случилось? Были ли какие-либо ошибки/исключения? Вы установили точку останова, чтобы проверить, что код, который вы ожидаете запустить, вызывается? Передаются ли правильные параметры подкачки? Передаются ли правильные параметры в запрос БД? Что возвращается в запросе БД? и т.д...
Пожалуйста, будьте конкретны, так как мы не можем запустить ваш код здесь.
Как только вы будете готовы обновить вопрос с четкими и краткими деталями, образцом кода, любыми сообщениями об ошибках (включая внутренние детали исключения) и т. д., Пожалуйста, нажмите на кнопку Улучшить вопрос виджет для добавления дополнительной информации к вопросу.
Elaine94
я уже обновил вопрос,и пример кода я уже предоставил в том, что я попробовал. спасибо
Graeme_Grant
Есть много вопросов, заданных выше. Пожалуйста, найдите время, чтобы прочитать их и ответить здесь или обновить в своем вопросе (предпочтительно).
Elaine94
я обновил вопрос. я добавил кодировку aspx.
Graeme_Grant
Требуется дополнительная информация. Вопросы таковы:
1. What happened? Were there any errors/exceptions. 2. Have you set a breakpoint to check that the code that you're expecting to run is being called? 3. Are the correct paging parameters being passed from the ASPX page to the code-behind? 4. Are the correct parameters being passed to the DB query? 5. What is being returned in the DB Query?
Каждый вопрос касается каждого этапа процесса. Это называется отладкой. Пожалуйста, найдите время, чтобы проработать эти вопросы, и вы найдете свой ответ.
Elaine94
1.Когда я запускаю веб-сайт, сначала он отображает список данных в gridview, а затем gridview получает управление подкачкой. поэтому я хочу увидеть данные на второй странице. но когда я нажал на вторую страницу,она не показывала следующую подкачку. нет никаких ошибок/исключений.
2. я уже установил точку останова, и да, код работает хорошо. количество индексов страниц имеет 2. так что его истинное право, просто не переходите на следующую страницу.(поправьте меня, если я ошибаюсь)
3. я не понимаю, о чем вы спрашиваете. я не совсем понимаю ваш вопрос № 3.
4. параметр, который должен быть передан в запрос БД, является правильным.
5.я установил размер подкачки 10, так что первая страница получила 10 данных, а вторая страница получила еще 2 данных, так как моя общая строка в БД равна 12.
Graeme_Grant
Так что если это так, то da.Fill(dt);
должно содержать только две строки для 2-й страницы.
Elaine94
да, правильно. вроде бы так.
Graeme_Grant
Тогда ваш GridView должен корректно показывать только эти 2 строки.
Elaine94
да, но эти 2 строки не отображаются. когда я нажал на вторую страницу, она не перейдет на вторую страницу и не отобразит эти 2 строки. это странно, потому что другая таблица gridview может выполнять подкачку страниц. но этот gridview не может функционировать так же, как другие, даже если я использовал ту же кодировку.
Graeme_Grant
Хорошо, поймите, в чем проблема. См. решение, опубликованное ниже.