Hejsan! Om jag inte ar helt fel ute sa tror jag faktiskt att RowDataBind inte laddas vid postback. Testa att satta en breakpoint i metoden och se om den kors nar du gjort din forsta klickning.GridView Row Selection ...etc ...
Jag är vad somliga skulle kalla för novis i dessa sammanhang, så nu var det sagt. Nu till mitt problem. Jag har en GridView med två stycken kolumner. När man för musen över respektive rad vill jag att hela raden skall vara klickbar och efter att en rad klickats skall den tilldelas en viss färg.
Detta har jag, efter mycket "googlande", löst men jag kan bara klicka på en rad. När jag klickar på en annan rad därefter får jag ett JavaScript fel. Väljer jag view source på sidan precis efter att den laddats in finner jag javascript-metoden __doPostBack(eventTarget, eventArgument). Men efter att jag som sagt valt att klicka på en rad kommer sidan att laddas om igen och denna gång UTAN denna javascript-metoden?? Vilket måste ses som anledingen till felet jag får.
Jag tänkte nu ta och dumpa lite kod här för att visa vad jag meckat ihop.
Vi börjar med Default.aspx.cs-filen
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
//DatabaseManager dbm = new DatabaseManager();
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnPreInit(EventArgs e)
{
Page.Theme = "Default";
base.OnPreInit(e);
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected override void Render(HtmlTextWriter writer)
{
for (int i = 0; i < this.myGrid.Rows.Count; i++)
{
ClientScript.RegisterForEventValidation(this.myGrid.UniqueID, "Select$" + i);
}
base.Render(writer);
}
protected void myGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline'"; //"this.style.cursor='hand';";
e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none'";
e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.myGrid, "Select$" + e.Row.RowIndex);
}
}
}
Och här kommer då själva Default.aspx-filen
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="myGrid" runat="server" DataSourceID="ObjectDataSource2" Height="237px"
Width="431px" OnRowDataBound="myGrid_RowDataBound" OnSelectedIndexChanged="Calendar1_SelectionChanged">
<SelectedRowStyle BackColor="Red" />
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="getArticles"
TypeName="DatabaseManager"></asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Hoppas det är någon "där ute" som kan hjälpa mig med detta tråkiga och irriterande problem. :-)
// NickeSv: GridView Row Selection ...etc ...