Problém s událostí RowDataBound v GridView   otázka

ASP.NET WebForms

Ahoj,

mám problém s událostí RowDataBound u GridView.

Mám tabulku kterou zobrazuji v GridView:

Typ | Zákazník

---------------------------------------------

Zákonný zástupce | 12

Manager | 6

a potřebuju aby když je v prvním sloupci "Zákonný zástupce" tak aby se číslo v druhém sloupci nahradilo záznamem z tabulky z databáze z jedné tabulky podle ID které to číslo reprezentuje a pokud je to "Manager" tak záznamem z druhé tabulky.

Momentálně to řeším takto:

protected void FunctionsListGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["iHolverConnectionString"].ConnectionString);
SqlCommand cmd;

if (e.Row.Cells[0].Text.ToString() == "Zákonný zástupce")
{
try
{
connection.Open();

cmd = new SqlCommand("SELECT ([FirstName] + ' ' + [LastName]) AS Name FROM [People] WHERE [Id] = @Id", connection);
cmd.Parameters.AddWithValue("Id", e.Row.Cells[1].Text.ToString());
e.Row.Cells[1].Text = cmd.ExecuteScalar().ToString();
}
finally
{
connection.Close();
}
}
else
{
try
{
connection.Open();

cmd = new SqlCommand("SELECT [BusinessName] FROM [Organizations] WHERE [Id] = @Id", connection);
cmd.Parameters.AddWithValue("Id", e.Row.Cells[1].Text.ToString());
e.Row.Cells[1].Text = cmd.ExecuteScalar().ToString();
}
finally
{
connection.Close();
}
}
}

ale tento kód mi vždycky skočí do té větve else i když je v prvním sloupci "Zákonný zástupce" a já nechápu proč.

Máte někdo nějaké tipy kde by mohla být chyba?

Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A proč nepoužijete metodu String.Compare? Čistší řešení a uvidíte zda se Vám vůbec stringy rovnají,dejte si tam breakpoint a proveďte debug.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha tak už vím kde je zakopán pes. Dlouhé á se mi v tom stringu vypisuje jako á

Nevíte jak tohle vyřešit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zobrazuje se to jako &#237 (středník)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zase špatně :D no prostě se to zobrazuje jako ta HTML reprezentace toho znaku (ampersand)(sharp)237(středník)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

proč tuto věc neřešíte na úrovni databáze pomocí view, které by vám vracelo záznamy v podobě jaké potřebujete? Tj. pro každou variantu vytvořit funkci a podle hodnoty ve sloupci Typ volat odpovídající funkci.

CREATE FUNCTION [dbo].[GetPerson] 
(
	@id int
)
RETURNS nvarchar(100)
AS
BEGIN
	DECLARE @Result nvarchar(100)
	SELECT @Result = (SELECT FirstName + ' ' + LastName FROM dbo.People where id = @id)
	RETURN @Result
END
GO


CREATE FUNCTION [dbo].[GetBusinessName] 
(
	@id int
)
RETURNS nvarchar(100)
AS
BEGIN
	DECLARE @Result nvarchar(100)
	SELECT @Result = (SELECT BusinessName FROM dbo.Organization where id = @id)
	RETURN @Result
END
GO

CREATE VIEW [dbo].[MojeView]
AS
SELECT     Typ, (CASE WHEN Typ = N'Zákonný zástupce' THEN dbo.getPerson(id) ELSE dbo.getBusinessName(id) END) AS jmeno
FROM         dbo.MojeTabulka
GO

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A vůbec nejlepší by to bylo řešit jedním SQL dotazem pomocí JOINu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback