GriedView - zaznaczenie wiersza

0

Witam,
Pomimo niezliczonych przykładów w necie nie mogę sobie z tym poradzić. Chodzi o zaznaczenie wiersza w GridView. Mam coś takiego:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // zmieniamy kolor podswietlenia w momencie najechania myszka na wiersz
                e.Row.Attributes.Add("onmouseover",
                "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#EEFF00';this.style.cursor='pointer';");
                // powracamy do orgilaneych ustawien
                e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=this.originalstyle;");
                //klikniecie
               //  e.Row.Attributes.Add("onClick");
                e.Row.Attributes["onclick"] =
                 ClientScript.GetPostBackClientHyperlink
                     (this.GridView1, "Select$" + e.Row.RowIndex);

            }
        }

a po kliknięciu w wiersz otrzymuję coś takiego:
http://areksmolarek.republika.pl/blad.htm
Nie musi to być akurat taka metoda jaka jest w kodzie powyżej. Może jest jakaś inna, której nie znalazłem. Docelowo dane z zaznaczonego wiersza mają zostać załadowane do textBox-ów. Proszę
o pomoc.
Pzdr
P.S. Używam LINQ do bazy.

0

Tez mialem podobny problem. Rozwiazalem go w taki sposob (w zdarzeniu Render)

for (int i = 0; i < this.grid.PageSize; i++)
			{
				PostBackOptions pbo = new PostBackOptions(this.grid, "Select$" + i.ToString());
				pbo.PerformValidation = false;
				this.Page.ClientScript.RegisterForEventValidation(pbo);
			}

A tu linijka kodu z RowDataBounds:

e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.grid, "Select$" + e.Row.RowIndex);
0

OK, tylko, żę ja nie mam zdarzenia Render przy GridView [???]. Mam PreRender

0

Chodzi o zdarzenia na stronie.
Po prostu daj na stronie:

protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
// dodatkowy kod
}

na pewno jest jakies lepsze rozwiazanie tego problemu (takie znalazlem 1,5 roku temu) ale te moje rownie dobrze dziala :)
W sumie nie pamietam dlaczego to jest w Render :) Poeksperymentuj :) ale w innych miejscach chyba jakiegos exceptiona dostawalem :P

0

Dodałem do web.config wpis:
<pages enableEventValidation="false">
co zlikwidowało wyskakujący błąd i prawie działa. No wieć wygląda to tak:

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline';";
                e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";

                e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.GridView1, "Select$" + e.Row.RowIndex);
            }
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TextBox1.Text = GridView1.SelectedRow.Cells[1].Text;
        }

Niestety prawie działa tzn. owszem po kliknięciu na jakiś wiersz w textBox-ie pojawia się wartość cells[1].text tego wiersza niestety po wciśnięciu kolejnego wiersza nic się nie dzieje. Do textBox-a nie trafia nowy wpis.
Nie wiem czy jest to poprawne ale w Page_Load() dodałem DataBind() i działa :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1