protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView2, "Select$" + e.Row.RowIndex);
e.Row.ToolTip = "Click to select this row.";
}
}
По сути, когда я обновляю страницу каждый раз, когда код внутри ^ Gets срабатывает, я пытаюсь сделать строки внутри моего представления сетки доступными для кликов, чтобы отобразить новую страницу с информацией об этой строке. но по какой-то причине при загрузке страницы он срабатывает для каждой отдельной строки.
Теперь я попробовал использовать! IsPostBack при загрузке страницы, проблема в том, что он предотвращает рендеринг страниц gridview> 2. Я также дошел до того, что пара операторов if предотвратила проблему, но потребовалось два щелчка мыши, чтобы событие сработало, поэтому я знаю, что делаю что-то неправильно, и надеюсь, что кто-то может помочь. просто собираюсь включить мой aspx и код C#, если кто-то может помочь, это будет очень признательно.
<asp:GridView ID = "GridView2" CssClass = "mydatagrid" PagerStyle-CssClass = "Gridpager" HeaderStyle-CssClass = "Gridheader" RowStyle-CssClass = "Gridrows"
runat = "server" AutoGenerateColumns = "false" AllowPaging = "true" OnRowDataBound = "GridView2_RowDataBound" OnPageIndexChanging = "GridView2_PageIndexChanging"
PageSize = "13" width = "100%" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID = "hdnIndex" runat = "server"
Value='<%# Eval("RecordID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField = "Certificate" HeaderText = "Number" />
<asp:BoundField DataField = "Company_Name" HeaderText = "Bank Name" />
<asp:BoundField DataField = "Phone1" HeaderText = "Phone" />
<asp:BoundField DataField = "Address_Line_1" HeaderText = "Street Address" />
<asp:BoundField DataField = "City" HeaderText = "City" />
<asp:BoundField DataField = "State" HeaderText = "State" />
</Columns>
<PagerSettings mode = "NumericFirstLast" FirstPageText = "First" PreviousPageText = "Previous" NextPageText = "Next" LastPageText = "Last" />
</asp:GridView>
И Page_Load
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConnectionStringGlobal;
conn.Open();
string query = "SELECT * FROM Clients";
SqlCommand cmd = new SqlCommand(query, conn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
conn.Close();
GridView2.DataSource = dt;
GridView2.DataBind();
}
Наконец, код разбивки на страницы:
protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView2.PageIndex = e.NewPageIndex;
GridView2.DataBind();
}
а вот код для щелчка по строке
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Attaching one onclick event for the entire row, so that it will
// fire SelectedIndexChanged, while we click anywhere on the row.
e.Row.Attributes["onclick"] =
ClientScript.GetPostBackClientHyperlink(this.GridView2, "Select$" + e.Row.RowIndex);
}
Console.WriteLine("");
}
@ Сантьяго Трехо, вот и все. Я пробовал использовать аргумент! IsPostBack, но, похоже, из-за этого моя таблица не сгенерировала первую страницу. Спасибо за ваше время и помощь. что касается всего кода, то это почти все, за исключением моего импорта.
Проверьте мой ответ ниже, пожалуйста.





GridView загружается каждый раз, когда страница обновляется или есть PostBack, поэтому можно загружать данные только тогда, когда страница загружается в первый раз, также мы сохраняем результаты запроса в переменную Session для дальнейшего использования в событии PageIndexChanged :
protected void Page_Load(object sender, EventArgs e)
{
if ( !Page.IsPostBack )
{
LoadData();
}
}
protected void LoadData()
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConnectionStringGlobal;
conn.Open();
string query = "SELECT * FROM Clients";
SqlCommand cmd = new SqlCommand(query, conn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
conn.Close();
GridView2.DataSource = dt;
GridView2.DataBind();
// Save into a session variable for later load on pagination.
Session.Add("tmp_dt",dt);
}
Теперь нам нужно также загрузить данные о событии GridView2_PageIndexChanging, чтобы пагинация работала:
protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
// Load the data previously saved into a session variable.
// You might want to read the database instead.
DataTable dt = (DataTable) Session["tmp_dt"];
this.GridView2.DataSource = dt;
// Change the page index before databind. This differs from the LoadData() method.
GridView2.PageIndex = e.NewPageIndex;
GridView2.DataBind();
}
И в вашем коде ASPX добавьте свойство AllowPaging=True в элемент управления GridView2.
Это возвращает ошибку в отношении Session ["tmp_dt"], сообщает мне, что я не могу неявно преобразовать тип объекта в datatable. Спасибо за любую помощь, которую вы можете оказать
Попробуй просто dt = Session["tmp_dt"];
Я пробую, как вы перечислили выше, слово в слово. Все еще дает мне эту ошибку.
Хорошо, я вижу ошибку, вместо DataTable dt = New DataTable; должен быть DataTable dt = DataTable;. Я обновлю ответ
Я знаю, что я, вероятно, не самый резкий, но все равно возвращаю ту же ошибку, что и выше, и теперь Datatable dt = DataTable; возвращает ошибку типа "datatable - это тип, но используется как переменная". еще раз спасибо за работу со мной.
Теперь это выглядит потрясающе, однако при загрузке или перезагрузке страницы вызывается каждая строка. и, таким образом, функция, которую я с ней связал, открывает 13 браузеров. Я приложу приведенный выше код для всех, кто может взглянуть на него.
Извините, я не понимаю, чего вы пытаетесь достичь на мероприятии RowDataBound. Не могли бы вы объяснить? Спасибо
Не могли бы вы вставить свое событие
Page_Load()из своего кода, пожалуйста? На самом деле, было бы здорово увидеть полный код, чтобы убедиться, почему нумерация страниц тоже не работает.