webForumDet fria alternativet

Problem med en GridViewUpdate i VS

.NETur .NET

4 svar · 470 visningar · startad av puritan

Medlem sedan maj 200567 inlägg
Frågan#1

Jo nu är det så här, har ett bra skumt problem, kodar 99% bara i Java men har tagit på mig att hjälpa till med ett projekt och har stött på en skum sak.
Kanske någon här kan hjälpa mig.

Jag har följande:

Från toppen

Web Layer
Business Logic Layer
Data Access Layer

I Weblagret har jag en Gridview som man kan Edit:a en rad i och på så sätt göra en Update.
I BLL har jag koppling mot DAL via en Update funktion som ser ut som följer:

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
public bool UpdateTime(int original_time_id, int project_id, DateTime starttime, DateTime endtime, int pause, String description)
{
DateTime checkDate = DateTime.Today;
int rowsAffected = 0;

    try
    {
        tidrapp.timeDataTable times = Adapter.GetTimeByTimeId(original_time_id);
        if (times.Count == 0 \|\| this.containsError(starttime, endtime, project_id, "AnyOne"))
            throw new Exception(); // No matching time found in database!

        if((DateTime.Compare(starttime,checkDate.AddMonths(1)) \> 0) \|\| (DateTime.Compare(starttime,checkDate.AddDays(-checkDate.Day+1)) \< 0))
            throw new Exception(); //Date out of bounds!

        tidrapp.timeRow time = times\[0\];

        //time.employee_id = employee_id;
        time.project_id = project_id;
        time.starttime = starttime;
        time.endtime = endtime;
        time.pause = pause;
        time.description = description;

        rowsAffected = Adapter.Update(time);
        return rowsAffected == 1;
    }
   catch (Exception) { return false; }       
}

Nu är det så att vi inte tillåter att vad som helst uppdateras och har därför ett par villkor om dessa inte uppfylls så vill vi neka det, meddela användaren samt stanna kvar i Edit mode.

Jag fann då att man kunde skapa en funktion som kördes efter en Update hade skett på datakällan.

Jag skapade denna:

protected void TimesheetGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
// Indicate whether the update operation succeeded.

    if (e.Exception == null)
    {
        Response.Write("\<script language=javascript\>alert('Row updated successfully.');\</script\>");
    }
    else
    {
        e.ExceptionHandled = true;
        Response.Write("\<script language=javascript\>alert('An error occurred while attempting to update the row.');\</script\>");
    }
    
   
    
    if (e.AffectedRows == -1)
    {
        Response.Write("\<script language=javascript\>alert('The date is out of bounds, +- one month!');\</script\>");
        e.KeepInEditMode = true;
    }
    else
    {
        Response.Write("\<script language=javascript\>alert('Tjihoooo!');\</script\>");
    }
    
}

TimesheetGridView_RowUpdated var precis vad jag sökte efter då jag nu uppe i Weblagret kan kommunicera med användaren med ex Javascipt alert.

Men problemet är som följer att argumentet e innehåller rowsAffected men den är alltid -1 och hur många Exceptions jag än kastar i BLL så är Exception = null i argumentet e.

Någon som kan förklara för mig hur jag från BLL kan få "False" med till weblagret så jag kan hantera det?

Tack på förhand!

//Puritan

Medlem sedan maj 20012 812 inlägg
#2

Först ett tips, använd tagarna för att göra din kod mer lätt läst..

puritan skrev:

Men problemet är som följer att argumentet e innehåller rowsAffected men den är alltid -1 och hur många Exceptions jag än kastar i BLL så är Exception = null i argumentet e.

Det är inte konstig att du aldrig får några exceptions från ditt BLL, du hanterar ju dessa själv...

try
{
...

rowsAffected = Adapter.Update(time);
return rowsAffected == 1;
}
//-- Här fångar du alla exceptions som kommer att inträffa inom din try-catch 
catch (Exception) { return false; }  
}

Det betyder ju att ditt BLL aldrig någonsin kommer att kasta några exceptions som ditt weblager kan fånga. Ta bort din catch-sats om du vill kunna kasta exceptions hela vägen upp.

Tyvärr så kan jag förlite om Gridviewns inbyggda datakontroller för att hjälpa dig med ditt problem om affectedrows

- M

Medlem sedan maj 200567 inlägg
#3

...

Men catch satsen måste ju finnas om jag ska ha en try annars kompilerar den inte. Frågan handlar mer om för mig vad en RowUpdated funktion egentligen tar med sig och gör.

Jag är ju van med att göra ett funktionsanrop som jag styr över själv nu ligger det i nån XML bakom allt låst till ett grafiskt objekt.

Hur som helst tar jag bort Catch-satsen så kompilerar den inte.

//Puritan

Medlem sedan jan. 20012 204 inlägg
#4

då får du ta bort try-blocket också

Medlem sedan aug. 20003 575 inlägg
#5

Du kan kasta vidare felet om du måste göra någon mellanhantering med att bara skriva throw; i catch.

Sedan så är det i princip aldrig okej att fånga felet med Exceptionklassen. Enligt praxis skall man inte fånga fel som man inte vet hur man skall hantera. Så släng det vidare sålänge du inte kan hantera det.

En annan sak du säger att du är från java i java har jag för mig att man måste ha try, catch runt sådant som kan kasta det, detta behövs inte i .net.

130 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)