|
I have problem with selected rows in DataGrid from WPF Toolkit. I have Observable Collection as ItemsSource.
I created small sample application. I´m adding file adresses to DataGrid and when I click on row in DataGrid I´m testing existence of file. If file doesn´t exit I remove that selected row automatically from DataGrid (ObservableCollection).
Problem is, that sometimes after deleting a row from DataGrid, previously selected row still remains as selected (blue background of row). But that row isn´t selected, because when I click on buton „Delete selected row“ I recieve message that no row is selected.
Exactly: When I have in DataGrid selected row (x) and a click on row (x + 1) and file doesn´t exit at row (x + 1), that row (x + 1) is automatically deleted and no row is selected - everything´s all right.
But when I have selected row (x) and a click on row (x - 1) and file doesn´t exit at row (x - 1), that row (x - 1) is deleted but row (x) still remains as selected (blue background of row x) - PROBLEM.
Doessomebody know please how to solve it? I need to have all rows visually unselected every time in my application after deleting a row in DataGrid (white background of all rows).
Here´s my code:
Window1.xaml
<Window x:Class="DataGrid.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="9*" />
</Grid.RowDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>
<dg:DataGrid x:Name="dataGrid"
Grid.Row="3"
Grid.ColumnSpan="2"
SelectionChanged="dataGrid_SelectionChanged"
Grid.Column="0"
CanUserDeleteRows="True"
Loaded="dataGrid_Loaded"
IsReadOnly="True"
SelectionUnit="FullRow"
SelectionMode="Single"
CanUserAddRows="False"
Visibility="Visible"
Margin="1"
Background="White"
AlternationCount="2" />
<TextBox Name="textBox1" Grid.Row="0" Grid.ColumnSpan="2" />
<Button Grid.Row="1" Name="Add" Click="Add_Click">Add address to DataGrid</Button>
<Button Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" Name="Delete" VerticalAlignment="Top" Click="Delete_Click">Delete selected row</Button>
</Grid>
</Window>
Window1.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Collections.ObjectModel;
namespace DataGrid
{
public partial class Window1 : Window
{
ObservableCollection<files> obs_col;
public Window1()
{
InitializeComponent();
obs_col = new ObservableCollection<files>();
}
private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
dataGrid.ItemsSource = obs_col;
}
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Files selectedFile = (Files)dataGrid.SelectedItem;
if (selectedFile != null)
{
if (!File.Exists(selectedFile.File))
{
obs_col.RemoveAt(obs_col.IndexOf(selectedFile));
}
}
}
private void Add_Click(object sender, RoutedEventArgs e)
{
obs_col.Add(new Files(textBox1.Text));
}
private void Delete_Click(object sender, RoutedEventArgs e)
{
Files selectedFile = (Files)dataGrid.SelectedItem;
if (selectedFile != null)
{
obs_col.RemoveAt(obs_col.IndexOf(selectedFile));
}
else
MessageBox.Show("No row is selected");
}
}
}</files></files>
Files.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataGrid
{
class Files
{
public string File
{
get; set;
}
public Files(string file)
{
this.File = file;
}
}
}
|
|
|
|
|
|
Please - just post one question. You could have asked both of these questions in one go, so there was no need to post the other one.
WPF - or Windows Presentation Foundation, is the evolution of desktop applications. It is designed to go beyond what you can do with traditional WinForms, and isn't bound by limitations of GDI+, building on DirectX as it does.
Silverlight is a cross-platform, web browser based version of WPF. Because it's cross platform, certain of the more powerful features of WPF (such as 3D) are not present yet, but it's getting there. BTW - with Silverlight, you can run .NET applications inside your browser.
|
|
|
|
|
|
I'm curious as to why you posted a question here asking this, rather than doing a simple Google search for the answer. It will have taken you longer to type this in, and wait for a reply from me than it would for you to search for it yourself. Please - if you are serious about being a development professional - learn to use basic research tools, such as Google, for yourself.
|
|
|
|
|
How is it anything you reply to gets deleted, are you using a magic browser, a cloaking device, a secret tag, to that effect?
<removable=false>
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Luc Pattyn wrote: How is it anything you reply to gets deleted, are you using a magic browser, a cloaking device, a secret tag, to that effect?
I'm just lucky that way - and I see you found the tag to prevent me removing your message.
|
|
|
|
|
|
It's the one that transfers money to my Cayman's account.
|
|
|
|
|
Oh har de har. Just because you didn't want to transfer the money. Sheesh.
|
|
|
|
|
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
duplication of development effort - example UtilLib.RegularExpressionUtil
Since I can use my good old lib from Silverlight by adding a reference to it, I'd have to basically copy and paste RegularExpresionUtil.cs from project UtilLib to SilverlightUtilLib. This is very error prone as this is not the only class. So I thought, hey, I can still add reference to "SilverlightUtilLib" from "UtilLib"!
So I thought okay all i need to do is to put those common classes in SilverlightUtilLib. Then UtilLib to add reference to "SilverlightUtilLib", which would be consumed by my infamous Winform/console Hello World.
In SilverlightUtilLib
<br />
public class RegularExpressionUtil<br />
{<br />
public virtual bool IsEmail(string strText)<br />
{<br />
...<br />
}<br />
}<br />
UtilLib references SiliverlightUtilLib
<br />
public class RegularExpressionUtil <br />
{<br />
...<br />
public override bool IsEmail(strnig strText)<br />
{<br />
... different implementation ...<br />
}<br />
...<br />
}<br />
So far so good. Solution get built successfully however running time error saying cannot load System library, see below.
<br />
void main(string[] args)<br />
{<br />
...<br />
if(Util.RegularExpressionUtil.IsEmail(strText))
{<br />
Conole.WriteLine("Yes");<br />
}<br />
... <br />
if(SilverlightUtil.RegularExpressionUtil.IsEmail(strText))<br />
{<br />
Conole.WriteLine("Yes");<br />
}<br />
So, this tells me while you can reference a Silverlight lib from a non-silverlight lib library, Silverlight uses a different "System" and you'll run into runtime error.
This brings me to my questions:
1. Is my understanding right? Silverlight and non-silverlight apps references difference "System" so you cannot call silverlight lib from non-silverlight library (if so I think M$ team should put appropriate restriction "Add Reference" dialog)
2. How would you make available many library function in UtilLib to SilverlightUtilLib? duplicating individual files is very error prone and labor intensive. (For your information I plan to make available DAO through WCF but basic function like string utility... seems like the only way is for me to copy and paste...)
I really don't like the copy and paste approach.
dev
|
|
|
|
|
I'm not sure about this particular case, but generally for
things I need to share between .NET 3.5 and Silverlight .NET
(for example, business objects), I use common source code
shared by two projects - one targeting the Silverlight .NET framework,
and one targeting .NET 3.5 framework. That way the source is in only one
place.
Check the namespaces and classes used by your code - if they are implemented
in both frameworks then you can use this approach.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Thanks to that this is exactly the kind of information I was looking for, good stuff!
dev
|
|
|
|
|
One final hurdle
class Person
{
protected Hashtable _lstProperties;
public Hashtable Properties
{
get { return _lstProperties; }
set { _lstProperties = value; }
}
}
And property really is a template class ...
class Property <T>
{
...
}
And Silverlight stipulates that every collection be System.Collections.Generic - this means even if I hand out the source code, it can't be consumed from Silverlight.
<div class="ForumMod">modified on Monday, February 16, 2009 8:35 PM</div>
|
|
|
|
|
|
How is this a problem with WPF, WCF or WF? Please pick a more appropriate forum to ask this question, as you are far more likely to get somebody to help you in the Graphics or the C++ forums.
|
|
|
|
|
hello
Mid way through my horror trying to port old library to Silverlight. One question
Can I pass, say, a DataSet/DataTable, from ASP.NET to Silverlight? If I could then I don't need to rewrite DAO I had...
Also is only way to access database from silverlight is through LinQ? I can't even use DbProviderFactory in my Silverlight lib! (world upside down)
Thanks
dev
|
|
|
|
|
In short, is there a way for me to grab a List<person> from my hosting ASP.NET project, then pass it to Silverlight xap so I don't need to rewrite my DAO layer?!
My DAO done in combination of ADO.NET (not linq) and NHibernate.
My hunch feeling is - sockets?! But that's a lot of client-server traffic!! Can we feed xap/Silverlight with List<person> BEFORE it's sent out to client instead of round tripping via socket (not to mention this architecture seems ugly!)
This article[^] showed how to pass data between ASP.NET and silverlight by way of QueryString but that's only suitable for VERY SIMPLE objects.
dev
modified on Saturday, February 14, 2009 11:48 PM
|
|
|
|
|
You can still use your conventional data access but you need to do so via a web service or via WCF. In my app. at work I started off using LINQ but later switched to conventional ADO. But I placed it all in a WCF service.
Kevin
|
|
|
|
|
Thanks yes. I am about to explore option Web Service+Silverlight. Socket is out of option because that'd make it an intranet solution (which is not our goal).
I'm still doing a lot of catch up, trying to figure out what WCF brings up and why I should use it instead of good old Web Service
dev
|
|
|
|
|
devvvy wrote: why I should use it instead of good old Web Service
One resaon is "In most cases WCF is significantly more performant (25%-50%) faster."
See here:
Silverlight-enabled WCF Services versus ASMX Web Services[^]
However, there is nothing to stop you using Web Services if that's what you're comfortable with. It's what my current client is using at work because they're familiar with it. Nonetheless the knowledge of WCF required for Silverlight is no more complex than what is required for web services. There's also a Visual Studio template for a Silverlight-enabled WCF service that does the plumbing for you.
Eventually you will need to move to WCF regardless of what you choose now as that is MS's preferred technology moving forward.
Btw, the best intro I've seen to WCF is Michele Bustamante's Learning WCF. The first chapter is available online and you can learn a lot just from that chapter.
Kevin
|
|
|
|
|
I know I can consume C# Web Service from a Java client - what about WCF? Is there anything proprietary...etc?
I already scanned through couple articles just now, seems like you can host WCF service on any Visual Studio project type, from Winform to console to WPF. Same can be said for client. Is that right?
dev
|
|
|
|
|
devvvy wrote: I know I can consume C# Web Service from a Java client - what about WCF? Is there anything proprietary...etc?
Since WCF is a superset of Web Services, you should be able to do it from a Java client, but I have no experience of it.
Kevin
|
|
|
|