#c# #sql #asp.net #gridview #datatable
#c# #sql #asp.net #Просмотр сетки #datatable
Вопрос:
Я пытаюсь создать отзывчивую таблицу данных, в которой datatable собирает информацию из sql с использованием C #. Когда таблица не находит результатов, панель поиска присутствует, и таблица реагирует, но как только появляются результаты, результаты отображаются, но таблица перестает отвечать. Вот мой код.
Это Javascript
<script type="text/javascript">
$(document).ready(function () {
$(".table").prepend($("<thead></thead").append($(this).find("tr:first"))).dataTable();
});
</script>
Это ASP
<asp:GridView cssclass="table table-striped table-bordered dt-responsive" runat="server" ID="GridView1" AutoGenerateColumns="false" AllowPaging="true"
OnPageIndexChanging="OnPageIndexChanging">
<Columns>
<asp:BoundField DataField="childs_name" HeaderText="Childs Name" SortExpression="childs_name" >
</asp:BoundField>
<asp:BoundField DataField="EI_number" HeaderText="EI Number" SortExpression="EI_number" />
<asp:BoundField DataField="service_type" HeaderText="Service Type" SortExpression="service_type" />
<asp:BoundField DataField="session_section" HeaderText="Attendance Status" SortExpression="session_section" />
<asp:BoundField DataField="session_date" HeaderText="Session Date" SortExpression="session_date" />
<asp:BoundField DataField="time_from" HeaderText="Start Time" SortExpression="time_from" />
<asp:BoundField DataField="time_to" HeaderText="End Time" SortExpression="time_to" />
<asp:BoundField DataField="Draft_Final" HeaderText="Note Status" SortExpression="Draft_Final" />
</Columns>
</asp:GridView>
И это код, лежащий в основе C#
string strcon = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
//GridView1.DataBind();
if (!this.IsPostBack)
{
this.BindGrid();
}
}
protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
this.BindGrid();
}
private void BindGrid()
{
try
{
SqlConnection con = new SqlConnection(strcon);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd = new SqlCommand("SELECT DISTINCT TOP 1000 childs_name, EI_number, service_type, session_section, session_date, time_from, time_to, Draft_Final FROM session_note_data_tbl where NPI = '" Session["npi"].ToString() "'; ", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
con.Close();
}
catch (Exception ex)
{
}
}
Комментарии:
1. В вашем коде есть пустой блок catch. Это очень плохая идея. Чего вы пытаетесь достичь, имея это?
2. Это временно, пока я пишу код. Можете ли вы объяснить, почему это плохая идея?
3. Пустой блок catch говорит: «Мне все равно, работает ли этот код. Если что-то пойдет не так, просто игнорируйте проблему. Даже не говорите мне об этом «. Вместо этого вы должны перехватывать исключения, когда вы можете что-то с этим сделать или когда вам нужно захватить какой-то дополнительный контекст для ведения журнала. У вас есть несколько достойных вариантов. Вы можете удалить try / catch. Вы можете добавить некоторые записи ошибок внутри блока catch. Или вы можете использовать некоторую логику в своем блоке catch, чтобы показать пользователю метку ошибки (желательно с некоторым протоколированием, чтобы вы могли получить полную информацию об ошибке для отладки).
4. @mason, спасибо, я посмотрю, как я могу эффективно использовать это. В то же время, не могли бы вы помочь мне разобраться с этим datatable. Я не получаю функции поиска и сортировки с помощью этого кода.
Ответ №1:
Для вашего требования есть два обходных пути:
- Вы можете добавить
table-responsive
класс bootstrap в свой GridView, чтобы всякий раз, когда в вашем GridView есть какие-то данные и ширина экрана вот-вот заполнится, он будет отображать прокрутку, а не переполняться и перестать отвечать на запросы.
<asp:GridView cssclass="table table-striped table-bordered table-responsive></GridView>
- Если это не работает, самый простой способ — обернуть весь Gridview внутри контейнера
<div class="container">
<asp:GridView cssclass="table table-striped table-bordered></GridView>
</div>
или вы также можете обернуть его внутри карты
<div class="container">
<div class="card">
<div class="card-header">
<div class="card-title">Results</div>
</div>
<div class="card-body">
<asp:GridView cssclass="table table-striped table-bordered table-responsive></GridView>
</div>
</div>
</div>
Комментарии:
1. Спасибо, я пробовал оба способа, и это все еще не работает. У меня есть разбивка на страницы, но сортировка и поиск недоступны.
2. @tolyP что не работает? Вы не получаете отзывчивый datatable или не получаете функции сортировки и поиска?
3. извините, я не понял, я не получаю функции сортировки и поиска.