Laden...

Forenbeiträge von Noodles Ingesamt 4.644 Beiträge

22.03.2009 - 21:21 Uhr

Du kannst die Spalten über die Eigenschaft DataFormatString formatieren.

Zeit -> DataFormatString="{0:t}"
Datum -> DataFormatString="{0:d}"

18.03.2009 - 07:49 Uhr

Hallo,

ich arbeite mit dem Entity Framework in einer WebApp, zumindest versuche ich es.
Ausgangspunkt sind 3 Projekte, Model (enthält das edmx File), BL ( Business Logik ) und WebUI.

Ich lade mein Datensatz in ein FormView und möche aus einer 1:n Beziehung nur ein bestimmtes Objekt anzeigen und bearbeiten. Das funktioniert auch.

protected void patientFormView_DataBound( object sender, EventArgs e )
{
    Patient patient = patientFormView.DataItem as Patient;
    if( patient != null && patient.Weights.Count != 0 )
    {
        var weight = patient.Weights.OrderByDescending( g => g.datum ).FirstOrDefault();
        CurrentWeight = weight;
        Label weightDateValueLabel = FormHelper.FindControl<Label>( patientFormView, "weightDateValueLabel" );
        if( weightDateValueLabel != null )
            weightDateValueLabel.Text = weight.Date.Value.ToShortDateString();

        Label weightValueLabel = FormHelper.FindControl<Label>( patientFormView, "weightValueLabel" );
        if( weightValueLabel != null )
            weightValueLabel.Text = weight.Weight.Value.ToString();
    }
}

Beim Update weiße ich dem Gewicht (welches ich mir in einer Session gemerkt habe) die neuen Werte zu und füge es dem Patienten hinzu, da die innere Liste ja nun einen Count von 0 hat.

protected void patientDataSource_Updating( object sender, ObjectDataSourceMethodEventArgs e )
{
    Patient patient = ( Patient )e.InputParameters[0];
    var weight = CurrentWeight;

    RadNumericTextBox weightTextBox = FormHelper.FindControl<RadNumericTextBox>( patientDataPanel, "weightTextBox" );
    if( weightTextBox != null )
        weight.Weight = weightTextBox.Value;

    RadDatePicker weightDatePicker = FormHelper.FindControl<RadDatePicker>( patientDataPanel, "weightDatePicker" );
    if( weightDatePicker != null )
        weight.Date = weightDatePicker.SelectedDate;

    patient.Weights.Add(weight);
}

Nun kommt das Update, wo ich meinen Fehler erhalte.

public void UpdatePatient( Patient patient )
{
    using( MyEntities context = new MyEntities() )
    {
        var originalPatient = context.Patients.Include( "Weight" )
                                              .Where( p => p.id == patient.id ).FirstOrDefault();

        context.ApplyPropertyChanges( "MyEntities.Patients", patient ); // Hier entsteht der Fehler!!!
                    
        foreach( var weight in patient.Weights.Where( g => g.id > 0  ) )
                context.ApplyPropertyChanges( "MyEntities.Weights", weight );

        foreach( var weight in patient.Weights.Where( g => g.id == 0 ) )
                originalPatient.Weights.Add( weight );

        int affectedRows = context.SaveChanges();
    }
}

Fehlermeldung: Der ObjectStateManager enthält keinen ObjectStateEntry mit einem Verweis auf ein Objekt des Typs MyEntities.Model.Patient'.

Lasse ich das "patient.Weights.Add(weight);" im patientDataSource_Updating weg, funktioniert es. Aber ich muss die Referenz ja mit zurückbekommen um diese speichern zu können.
Kann mir jemand sagen, wo mein Fehler liegt?

Viele Grüße
Noodles

16.02.2009 - 11:19 Uhr

Findest Du in dc.ChangeConflicts nichts?

13.02.2009 - 14:40 Uhr

Du kannst es per FormView.ChangeMode( FormViewMode.Insert ) in den Insert Mode versetzen. Meintest Du so etwas?

13.02.2009 - 10:54 Uhr

wenn ich "Listbox1.SelectedItems.Count" angebe, dann liefert er mir die Gesamtanzahl aller in der listbox vorhandenen Items und nicht nur die Anzahl der markierten

Diese Eigenschaft gibt es doch gar nicht!?
Du musst die Items durchlaufen und prüfen, ob das aktuelle Item Selected ist.

12.02.2009 - 07:17 Uhr

Entweder Du gibst Deinem Objekt eine Eigenschaft (Differenz) oder fügst eine Spalte manuell an und füllst diese im RowDataBound Eventhandler.

protected void GridView_RowDataBound( object sender, GridViewRowEventArgs e )
{
    if( e.Row.RowType == DataControlRowType.DataRow )
    {
        Break b = ( Break )e.Row.DataItem;
        if( b != null )
        {
            Label lbl = ( Label )e.Row.FindControl( "DateDiff" );
            if( lbl != null )
                lbl.Text = "dein Text...";
        }
    }
}
12.02.2009 - 06:55 Uhr

UpdatePanel.Update nach der Ausführung des Service aufrufen?

11.02.2009 - 14:31 Uhr

Ich werde mir auf jeden Fall die professionellen Lösungen zum OR Mapping ansehen, die ihr genannt habt.

Vielleicht hilft dir das für das Entity Framework: Entity Framework learning guide

10.02.2009 - 13:01 Uhr

Hast Du anstatt des Femdschlüssels, dass refrenzierte/abhängige Objekt in Deinem Objekt.
Falls ja kannst Du es einfach binden.

<asp:TemplateField>
    <ItemTemplate>
        <asp:Label ID="contanctNamelabel" runat="server" Text='<%# Eval( "Customer.ContactName" ) %>' />
    </ItemTemplate>
</asp:TemplateField>
23.01.2009 - 07:11 Uhr

Der DB Type wurde doch schon genannt?

Der DB Dateitype heißt Image(Er kann aber für jede Datei gebraucht werden).

Bitte die Suche benutzen, die Frage gab es schon mehrmals.

22.01.2009 - 07:25 Uhr

Zum Beispiel so:

DataView view = ( DataView )SqlDataSource1.Select( DataSourceSelectArguments.Empty );
string firstValue = ( string )view[0][0];
22.01.2009 - 07:11 Uhr

Du kannst die Parameter auch im OnSelecting Event der ObjectDataSource setzen.

18.01.2009 - 20:06 Uhr

Auf die Werte kannst Du im ItemUpdating des DetailsView zugreifen.

11.12.2008 - 11:28 Uhr

Einen Filter gibt es nicht, dass musste Du selbst validieren.
http://forums.asp.net/t/1156963.aspx

03.12.2008 - 15:19 Uhr

Brauchst Du nicht. Was funktioniert denn nicht? Hast Du vielleicht AutoPostBack nicht auf true gesetzt?

03.12.2008 - 07:26 Uhr

Du kannst das im Selecting Event der ObjectDataSource handeln.

protected void myObjectDataSource_Selecting( object sender, ObjectDataSourceSelectingEventArgs e )
{
    e.InputParameters["myObject"] = myObject;
}

Allerdings musst Du dann auch den TypeName des Parameters der ObjectDtaSource bekannt machen.

<asp:ObjectDataSource ID="myObjectDataSource" runat="server" 
        SelectMethod="..." TypeName="MyObject" ...>
02.12.2008 - 12:01 Uhr

Du greifst aber auch nur auf Feld 1 (Index 0) zu, ist das vlt. das Problem?

this.lsDS.Add(this.rdr[0].ToString());
02.12.2008 - 07:36 Uhr
new FileInfo( "..." ).Directory.Name
28.11.2008 - 12:19 Uhr

Schau mal hier.

28.11.2008 - 08:37 Uhr

Nullable Types sind als Generics gelöst: Ein nullable Type ist vom Typ System.Nullable<T>, bei dem <T> den Typ angibt. In C# gibt es dafür eine andere abkürzende Schreibweise, und zwar T?. Man schreibt also den eigentlichen Typ gefolgt von einem "?".

Quelle: http://www.tecchannel.de/webtechnik/entwicklung/402385/die_net_clr_version_20/index18.html

25.11.2008 - 15:38 Uhr

Ich habe auch etwas sehr schönes gefunden.

public const bool TRUEVALUE = true;
public const bool FALSEVALUE = false;
public static bool CheckBoolValue(bool value)
{
    return value ? TRUEVALUE : FALSEVALUE;
}
19.11.2008 - 13:22 Uhr

Das hättest Du auch mit einem GridView hinbekommen. Beide Controls (DataGrid, GridView) sind aber für DataBinding designed, um Daten anzuzeigen.

19.11.2008 - 11:54 Uhr

Schau mal hier.

19.11.2008 - 11:49 Uhr

Das GridView wurde für DataBinding designed. Was hast Du denn genau vor?

17.11.2008 - 07:10 Uhr

Setze im ListView.DrawColumnHeader Event die Eigenschaft e.DrawDefault auf true.

13.11.2008 - 07:16 Uhr
foreach ( DataControlField column in myGridView.Columns )
{
    string s = column.HeaderText;
}
12.11.2008 - 10:10 Uhr

Mit linq kannst du weder Tabellen anlegen noch sonst irgendwelche Dinge machen die das Datenbank-Design verändern.

Das stimmt so leider nicht. MIt LINQ to SQL ist das schon möglich.

DataContext.CreateDatabase()

28.10.2008 - 07:28 Uhr

Den Wertebereich kannst Du im TypeValidationCompleted Event prüfen.

13.10.2008 - 13:57 Uhr

Hallo,

wie verwendet man denn in Oracle eine Variable in einer Prozedur mit mehreren Abfragen nutzen? Ich laufe immer wieder in den genannten Fehler.

BEGIN
    DECLARE 
       dsCount INT;
BEGIN
    SELECT COUNT(Id) INTO dsCount FROM ...;

SELECT * FROM
(
    ...
) p
WHERE ROWNUM = ROUND( dsCount / 2 );
END;
END;

Kann man kein 2. Select ohne INTO ausführen?

10.10.2008 - 07:01 Uhr

Danke für die Hilfe. Hat alles leider nichts gebracht. Deswegen habe ich Windows neu aufgesetzt.

08.10.2008 - 20:49 Uhr

Nein, ich habe nix deaktiviert. Wue gesagt ich kann ja auch nichts von der MS Siete download. Aber mit einem anderen Rechner, der auch hier bei mir steht funktioniert es.

08.10.2008 - 18:44 Uhr

Hallo,

ich bekomme den genannten Errorcode, wenn ich Windows Update ausführen möchte. Weiterhin kann ich von keiner Microsoft Seite etwas downloaden, dabei laufe ich den üblichen IE Fehler: "Die Webseite kann nicht angezeigt werden.".
Mit einem anderen PC ist es aber ohne Probleme möglich.
Das was ich im Internet fand, hat mich nicht weiter gebracht. Ich habe etwas wegen dem Defender gefunden und deshalb die letzten Updates manuell installiert, brachte aber keinen Erfolg.

Hat jemand eine Idee?

System: Windows Vista Ultimate SP1

Viele Grüße
Noodles

02.10.2008 - 07:23 Uhr

Hast Du mal den Z-Index der unteren TextBox auf -1 gesetzt. Ich hab es probiert und es funktioniert im IE7.

26.09.2008 - 13:49 Uhr

Data binding using the DataSourceID property, which allows you to bind the GridView control to a data source control. This is the recommended approach because it allows the GridView control to take advantage of the capabilities of the data source control and provide built-in functionality for sorting, paging, and updating.

Data binding using the DataSource property, which allows you to bind to various objects, including ADO.NET datasets and data readers. This approach requires you to write code for any additional functionality such as sorting, paging, and updating.

19.09.2008 - 08:54 Uhr

Wir nutzen auch den Team Foundation Server.

12.09.2008 - 09:59 Uhr

Aber dass die Amis ihre eigenen Türme gesprengt haben, ist doch kompletter Blödsinn.

Aber das sie den Ausweis des Terroristen Ata in den Trümern finden und anschließend im TV präsentieren auch. 😉

Das passt alles immer zu gut ins Geschehen. Wie bei den deutschen Terroristen, der ''Sauerland-Zelle''. Die Festnahme war wohl so spektakulär, weil wir kurz vor der Stunde Null standen, einem Inferno. Leider wurde kurze Zeit später bekannt, dass keine Gefahr mehr vorhanden war, da die Flüssigkeit von Beamten schon ausgetauscht wurde.

12.09.2008 - 09:18 Uhr

Die Parameter müssen den Namen der Properties entsprechen. Du kannst auch in der ObjacDataSource den Parameter DataObjectTypeName setzen, dann kannst Du Deinen Methoden als Parameter das Objekt verpassen, anstatt die einzelnen Properties.

09.09.2008 - 10:56 Uhr

Okay, da ist wohl was dran.

Richtig, ich hatte vor wenigen Wochen dasselbe Problem. 😉

09.09.2008 - 10:22 Uhr

Du benutzt ein WebApplication Projekt und keine WebSite, richtig?
Das WebApplicationProjekt kann keine Profile automatisch generieren. Bei Codeplex gibt es ein Plugin für das VS2005.

23.07.2008 - 10:40 Uhr

Dein Objekt muss IComparable implementieren. Danach kannst Du einfach Max() auf die Liste aufrufen.

04.07.2008 - 13:16 Uhr
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Value");

dt.Rows.Add( "1", "Bo" );
dt.Rows.Add( "2", "Co" );
dt.Rows.Add( "3", "Ac" );
dt.Rows.Add( "4", "Bo" );
dt.Rows.Add( "5", "Ec" );
            
string city = "Bonn";
var query = from d in dt.AsEnumerable()
            where city.ToLower().Contains(d.Field<string>("Value").ToLower())
            select d;