Om jag har en Sp och vill Få ut Lagersaldo fr en tabell och där Lager är 0 få ut Beställningsvara. Om jag förstår dig rätt.. Vad jag vill är att om Lagersaldo är 0 så vill jag få ut texten Beställningsvara Vill du verkligen returnera en text istället för en tabell? Jag skulle valt att i den kod som anropar SP:n kontrollera om man får ut några poster och om inte skriva ut (eller vad du nu vill göra med ordet) 'Beställningsvara'. Ska vi se om jag förstått dig rätt. När du söker ut ditt lagersaldo så vill du få ut ordet beställningsvara istället för antal i lager (som jag gissar är kolumnen 'Lager'). Jag har en Gridview på en sida listar Lagersaldo fr en SQL db. Skulle vilja få ut att om Saldo är 0 så visas i Saldo kolumnen att det är en beställningsvara. Posta din SP i sin helhet och beskriv exakt vad du vill göra så kanske någon kan hjälpa dig. Här är min SP Behåll SP'n som den är. I din dataview tar du hand om att omvandla lagervärdet till text istället, det hör inte hemma i databasen. Då kan du dessutom lägga till en massa tevliga funktioner, tex att varna för lågt lagervärde (tex om lager < 5 eller nåt sånt). Typ.... Jag håller också med om att bya ut noll mot en text inte hör hemma i SP:n.SP Problem
<code>
If Lager IS NULL
DECLARE
SET Lager = 'Beställningsvara'
AS
SET NOCOUNT ON;
SELECT ArtNr, Benamning,Storlek,Farg,Lager FROM LagerSaldo
WHERE Lager IS NULL
</code> Sv: SP Problem
SELECT ISNULL (Lager, 'Beställningsvara')
om Lager är NULL ges texten i parameter 2.Sv:SP Problem
Sv: SP Problem
Ett annat alternativ är ju att låta SP:n ha ett returvärde där du returnerar antalet poster, är det då 0 vet du att det inte finns några. Kan dessutom vara praktiskt i andra sammanhang i koden. Du kan också använda returvärdet för att tex returnera -1 om något går fel.Sv: SP Problem
1 lösning: Får ut alla, men där Lager är 0 så skrivs ordet Beställningsvara ut.
<code>
SELECT
ArtNr
, Benamning
, Storlek
, Farg
, case when Lager = 0 then 'Beställningsvara' else convert(varchar,Lager) end
FROM
LagerSaldo
</code>
2 lösning: Hämta ut endast de som är beställningsvara
<code>
SELECT
ArtNr
, Benamning
, Storlek
, Farg
, 'Beställningsvara'
FROM
LagerSaldo
where Lager is NULL --alternativt Lager = 0
</code>Sv:SP Problem
Du skriver att jag i den kod som anropar SP:n, den är ju autogenererad och inte i Code behind. Hur skulle en sådan kunna se ut. Dom fält jag har är. ArtNr,Benämning, Färg, Lager.
Sp kollar Benämning och Färg sedan listas Produkterna.Sv: SP Problem
Det går inte lösa med nån Wizard i VS.Sv:SP Problem
CREATE PROCEDURE dbo.Lager
@BenamningVal nvarchar(50),
@FargVal nvarchar(50)
AS
SET NOCOUNT ON;
SELECT ArtNr, Benamning,Storlek,Farg,Lager FROM LagerSaldo
WHERE Benamning = @BenamningVal AND Farg = @FargVal
GO
Sv: SP Problem
Om jag har förstått rätt så vill du göra en dataview utifrån din SP, och däromvandla alla rader som har Lager = 0 till texten "Bestl...." och det skall du inte göra i SP utan det ser jag som rent presentationsjunk.Sv: SP Problem
autogeneratecolumns sätts till false. Skapa kolumnerna med kod, skapa en user kolumn som ärver från TemplateField för Lagersaldokolmumnen och gör en override på FormatDataValue där du tittar på värdet och skriver ut värdet om det är > 0 och annars skriver du ut "Beställ....".
I korta drag, har inte tid mer mer just nu.... :-( Sv: SP Problem
Här är ett lite naivt förslag, helt otestat.
Din GridView måste sättas att kasta eventet RowDataBound.
Den anropas för varje rad som ska läggas ut, och där kan du sedan manipulera datat.
Googla på "GridView RowDataBound" så hittar du mycket om detta.
protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int unitsInStock =
Convert.ToInt32(System.Web.UI.DataBinder.Eval(e.Row.DataItem,
"Lager"));
if (unitsInStock == 0)
e.Row.Cells[COLUMN_INDEX_LAGER].Text = "Beställningsvara";
}
}