Du kannst die Spalten über die Eigenschaft DataFormatString formatieren.
Zeit -> DataFormatString="{0:t}"
Datum -> DataFormatString="{0:d}"
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
Findest Du in dc.ChangeConflicts nichts?
Du kannst es per FormView.ChangeMode( FormViewMode.Insert ) in den Insert Mode versetzen. Meintest Du so etwas?
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.
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...";
}
}
}
UpdatePanel.Update nach der Ausführung des Service aufrufen?
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
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>
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.
Zum Beispiel so:
DataView view = ( DataView )SqlDataSource1.Select( DataSourceSelectArguments.Empty );
string firstValue = ( string )view[0][0];
Du kannst die Parameter auch im OnSelecting Event der ObjectDataSource setzen.
Auf die Werte kannst Du im ItemUpdating des DetailsView zugreifen.
Einen Filter gibt es nicht, dass musste Du selbst validieren.
http://forums.asp.net/t/1156963.aspx
Brauchst Du nicht. Was funktioniert denn nicht? Hast Du vielleicht AutoPostBack nicht auf true gesetzt?
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" ...>
Du greifst aber auch nur auf Feld 1 (Index 0) zu, ist das vlt. das Problem?
this.lsDS.Add(this.rdr[0].ToString());
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
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;
}
Das hättest Du auch mit einem GridView hinbekommen. Beide Controls (DataGrid, GridView) sind aber für DataBinding designed, um Daten anzuzeigen.
Das GridView wurde für DataBinding designed. Was hast Du denn genau vor?
Setze im ListView.DrawColumnHeader Event die Eigenschaft e.DrawDefault auf true.
foreach ( DataControlField column in myGridView.Columns )
{
string s = column.HeaderText;
}
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()
Den Wertebereich kannst Du im TypeValidationCompleted Event prüfen.
Weil es ein komplexes Select ist.
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?
Danke für die Hilfe. Hat alles leider nichts gebracht. Deswegen habe ich Windows neu aufgesetzt.
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.
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
Hast Du mal den Z-Index der unteren TextBox auf -1 gesetzt. Ich hab es probiert und es funktioniert im IE7.
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.
Wir nutzen auch den Team Foundation Server.
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.
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.
Okay, da ist wohl was dran.
Richtig, ich hatte vor wenigen Wochen dasselbe Problem. 😉
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.
Dein Objekt muss IComparable implementieren. Danach kannst Du einfach Max() auf die Liste aufrufen.
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;