Hi, I am developing a WPF browser application using Linq and your datagrid but I am having major problems trying to delete a record. From looking through various forums and your help I have got to the point where I can retrieve the data usning LINQ and settign the result as the DataSource. I can add a record fine but whenit comes to deleteing I just cant seem to tie it togther. A number of forums have suggesed that once you know what records you need to delete you query it from teh database using LINQ then plase the result into a DeleteOnSubmit command. So I have the following code:
private void datagridMapping_RecordsDeleting(object sender, Infragistics.Windows.DataPresenter.Events.RecordsDeletingEventArgs e)
{
DataCentreDataContext dsMapping = new DataCentreDataContext();
foreach (var rec in datagridMapping.SelectedItems.Records)
try
var mappingres =
from mappingItem in dsMapping.DATAMAPPINGs
where mappingItem.INDEX == rec.???????????????
select mappingItem;
DATAMAPPING delRecord = new DATAMAPPING();
delRecord = (DATAMAPPING)mappingres;
dsMapping.DATAMAPPINGs.DeleteOnSubmit(delRecord);
}
catch (Exception ex)
MessageBox.Show("Error", "Error - " + ex.Message);
dsMapping.SubmitChanges();
I have placed ?????? where I am having the trouble. I guess I may have this very wrong so any help would be very much appreciated.
Regards,
Kevin.
Hello Kevin,
When having a quick look at your code, this is what I notice:
1. The records deleting event arguements expose a collection of the records for deletion as well (e.Records), which is a much more flexible than the SelectedItems.Records collection.
2. Your LINQ query will return an IEnumerable object, so I think you will not be able to cast mappingres to DATAMAPPING, as I believe one is collection and the other not.
3. I think you do not need this LINQ query at all. As you are adding the underlying data business object to the DeleteOnSubmit method, you can do this directly from the DataRecord. Each DataRecord exposes a Dataitem property, which will be your underlying object, in your case DataMapping so you can pass that in the DeleteOnSubmit method directly. Note, that you have to cast the Record to DataRecord, when iterating though the e.Record collection.
Let me know if you have questions on this.
Hi,
I am struggling with the whole concept to be honest. I am new to LINQ and WPF.
I thought the insert was working the code was placed in the RecordUpdated event and worked, but I now get an error when I update an existsing record.
I cant seem to get my gead around how to simply link up a table and the grid to enable simple Add/Edit/Remove functionality.
I dont want to expose all the columns of the tabel to the grid.
Do you have a sample project I may be able to get some idea of what I am dealing with.
Cheers, as awlays.
sorry, but can u give me the example for vb version?
thanks, rey
PS. I also tried to get some ideas from the feature browser but the EditorStyle could not allow a Combobox.
I am not sure if I am getting any closer but here goes:
I have the following CellValuePresenter code:
<Style TargetType="{x:Type igDP:CellValuePresenter}" x:Key="Fkt">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
<ComboBox ItemsSource="{Binding Path=scncodes}" IsSynchronizedWithCurrentItem="True" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
I have placed this in the field settings:
<igDP:Field IsScrollTipField="True" Name="SCNCODE">
<igDP:Field.Settings>
<igDP:FieldSettings CellMinWidth="200" CellWidth="200" CellValuePresenterStyle="{StaticResource Fkt}" />
</igDP:Field.Settings>
</igDP:Field>
And scncodes is populated in code behind:
var scncodes = (from scncode in dsMapping.DATAMAPPINGs
select scncode.MEASUREMENT).Distinct();
I get the combobox on the grid but its empty.
I created a combobox on another part of the page and set the item source to the scncodes to check the query and that worked fine.
I then created a combobox in code but could not figure a way to reference it in XAML in the CellValuePresenter.
At this point I am stuck and not sure which way to go. If there are any sample out there I could get some idea from I would be very much obliged
Cheers,
Kevin,
It looks like that when setting the ItemsSource property of the ComboBox, you are setting it to a string, which is an array of chars and that is why each char is considered a different item. Is the SCNCODE field of type collection or string? If string, this is the expected behavior. If you want to display something else (data outside the datasource of the XamdataGrid), you have to make this field unbound, and bind the ItemsSource property of the ComboBox to a collection (and set DisplayMemberPath and ValuePath properties).
You can see some example of how to bind data to a XamComboEditor in the FeatureBrowser, which is similar to what you want to do with the ComboBox. The examples are under XamDataGrid - Control Composition - XamComboEditor in DataRecord Cell.
I got the selection from the treeview working as you suggested...many thanks :-)
As for the combobox, I have placed a (standard) combobox in a Datagrid with the intention to allow the user to either edit the value or when creating a new record select a value. Therefore for each existing row the cell should show the current value but when clicked show a list form a different source.
The style code looks like this
<Page.Resources>
<ComboBox ItemsSource="{TemplateBinding Content}" IsSynchronizedWithCurrentItem="True" />
</Page.Resources>
The implementation look like this
My first problem the cell only shows the first character then when you click on it the rest of the characters drop down on each row.
My next problem is how do I bind a different dataset to the combobox so the user can select from the list
Sorry if this seems like a newbie question.