|
The article is four years old.
Your question on the article was 4 hours ago.
Give it time...
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Manfred R. Bihy: "Looks as if OP is learning resistant."
|
|
|
|
|
Give a chance for the author to atleast look at it.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
|
|
|
|
|
Sure sir
If you can think then I Can.
|
|
|
|
|
Are there any genius way to make Display and value member object related to the object in the combobox?
As you can see in the following code, I'm using IEnumrable of Email objects to add into the combobox, and the Email are an entity object related to the LinQ (.dbml) object mapped from the database (which means each object itself contains value fields from the database).
comboBox_n1.Items.Clear();
comboBox_n1.Items.AddRange(_controller.getEmailList().ToArray<Email>());
comboBox_n1.Sorted = true;
comboBox_n1.SelectedIndex = -1;
Right now it shows an object string like: 'MyApp.Email' for each object in the list.
Before now, I have made a ToString() in the .dbml code, for each object which ofcause works, but it ain't a sustainable solution since it will dissapear each time I made a change to the datamapper.
So are there any way to auto generate these display members??
|
|
|
|
|
Hi,
You can put your ToString() method in a separate file, making use of the 'partial' keyword in the class declaration.
So, when you regenerate your model, your separate file won't be impacted by the changes, therefore your tweak will still work.
Hope this helps.
Regards.
|
|
|
|
|
Thanks, that will work for sure.
But it still feels like some kind of 'hack' in the structure. Ain't there any official way to do it, like 'click here and choose which data field to be shown as display member', for non-DataSources (like generic lists)??
|
|
|
|
|
grmihel2 wrote: Ain't there any official way to do it, like 'click here and choose which data
field to be shown as display member'
No, there is no "offical" way to do it. Based on your requirements, the suggestion given is the best one to go with. Use a Partial class and put the code that cannot change into a seperate file.
|
|
|
|
|
Just realized that I've never used the partial function before, so I'm not sure how to attack it. Could you gief an example plz?
I have a CRUD (Create, Read, Update, Delete) class for handeling all the email specific methods like:
public Email GetAllEmails(){}
The Email class is within the DataClass Datacontext, and thats the one who is getting regenerated each time I have a db scheme change.
Could you give an example of how to make this partial class for a ToString() for the Email class?
Here is a short outtake of the CD (Class Diagram): http://imageshack.us/photo/my-images/36/classdiagram.jpg/
|
|
|
|
|
Simple. It's a class that get split into multiple files. One of them has to have the normal class definition. The others all continue the class code inside a partial class definition.
C# Partial Class[^]
|
|
|
|
|
Hi,
Sorry for this late reply but I was on vacation these days.
First, you have to make sure that generated classes are all defined with partial keyword.
For example :
public partial class DataClass
{
public partial class Email
{
}
}
Then, just add a Whatever.cs file to your project :
public partial class DataClass
{
public partial class Email
{
public override string ToString()
{
}
}
}
You could also define an extension method for you Email class : just add an Extensions.cs file to your project and define an extension method to the Email class.
public static class Extensions
{
public static string ToString(this Email email)
{
}
}
Hope this helps. Kindly.
|
|
|
|
|
Hi,
We have an issue - how to pass .net (C#) string to unmanaged C++ dll?
We tried something, but this error came up:
"An unhandled exception of type 'System.AccessViolationException' occurred in mscorlib.dll
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Does anybody know how to do this? We need the code sample.
Thank you in advance.
Goran
|
|
|
|
|
Should be no problem. A managed string can be passed to a native char* (read-only) in a straightforward way; for a writeable char*, you need a StringBuilder. See this little article[^].
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
Thank you.
I've just tried it, but the same error came up.
Our C# code looks as follows:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("F4100FB3-75C5-4C4F-8034-9B836598DD1E")]
public interface IDecoder
{
[return: MarshalAs(UnmanagedType.BStr)]
StringBuilder Decode([MarshalAs(UnmanagedType.BStr)] ref string encodedString);
public class UfoDecoder : IDecoder
{
public StringBuilder Decode(ref string encodedString)
{
byte[] dec64 = Base64Decode(encodedString);
byte[] unzipped = CompressionUtility.Decompress(dec64);
return BinToXml(unzipped);
}
And our C++ code looks as follows:
extern "C" __declspec(dllexport) void decode(char *encString, char *answer )
{
HRESULT hr = CoInitialize(NULL);
IDecoderPtr pIDec(__uuidof(UfoDecoder));
BSTR k1 = bstr_t(encString);
BSTR k2 = bstr_t(answer);
pIDec -> Decode(&k1, &k2);
The error comes up on calling last line in C++ block.
modified on Monday, May 30, 2011 5:05 AM
|
|
|
|
|
get rid of the ref keyword, objects always get passed by reference, your native code will get a pointer without using ref .
FWIW: With ref , it would be a char** .
[ADDED]
On a second read, I don't understand your native code at all. It seems to me the decode() function isn't relevant. All that matters is Decode(), of which you didn't show the actual signature. However your prototype suggests it returns a StringBuilder (bad idea, that is a managed type, no native function returns managed types automatically), and yet your decode() just ignores the return value!?!?
If you need more help, please show the declaration of the native Decode() function.
If it doesn't require BSTR (say it just takes two char*, then things should be simple).
[/ADDED]
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
modified on Monday, May 30, 2011 5:38 AM
|
|
|
|
|
Do you mean on this:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("F4100FB3-75C5-4C4F-8034-9B836598DD1E")]
public interface IDecoder
{
[return: MarshalAs(UnmanagedType.BStr)]
StringBuilder Decode([MarshalAs(UnmanagedType.BStr)] string encodedString);
public class UfoDecoder : IDecoder
{
public StringBuilder Decode(string encodedString)
{
byte[] dec64 = Base64Decode(encodedString);
byte[] unzipped = CompressionUtility.Decompress(dec64);
return BinToXml(unzipped);
}
If so, I have the same error.
|
|
|
|
|
sorry, we were both typing at the same time. I expanded my earlier reply.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
|
|
|
|
|
Ok. The whole code is here:
extern "C" __declspec(dllexport) void decode(char *encString, char *answer )
{
HRESULT hr = CoInitialize(NULL);
IDecoderPtr pIDec(__uuidof(UfoDecoder));
BSTR k1 = bstr_t(encString);
BSTR k2 = bstr_t(answer);
pIDec->Decode(&k1,&k2);
SysFreeString(k1);
SysFreeString(k2);
}
int _tmain(int argc, _TCHAR* argv[])
{
char *xml = (char*)malloc(5000000*sizeof(char));
char* str = "Some encoded string";
int length = strlen(str);
decode(str, xml);
printf("Decoded = %s",xml);
int vol = strlen(xml);
return 0;
}
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("F4100FB3-75C5-4C4F-8034-9B836598DD1E")]
public interface IDecoder
{
[return: MarshalAs(UnmanagedType.BStr)]
string Decode([MarshalAs(UnmanagedType.BStr)] ref string encodedString);
[ComVisible(true)]
[Guid("85F2DFFB-5655-40DD-A779-94388A2773DC")]
[ProgId("UfoDecodeWrapper.UfoDecoder")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IDecoder))]
public class UfoDecoder : IDecoder
{
public string Decode(ref string encodedString)
{
byte[] dec64 = Base64Decode(encodedString);
byte[] unzipped = CompressionUtility.Decompress(dec64);
return BinToXml(unzipped);
}
[ADDED]
If str variable in _tmain function in this line:
char* str = "Some encoded string";
is not so long we're getting Xml.
But, if str is very long, the error comes up.
[/ADDED]
modified on Monday, May 30, 2011 6:22 AM
|
|
|
|
|
Sorry, I give up. It is all just too confusing for me. I now think you have native code calling managed code, not the other way around.
Luc Pattyn [My Articles] Nil Volentibus Arduum
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Please use <PRE> tags for code snippets, they improve readability. CP Vanity has been updated to V2.3
modified on Friday, June 10, 2011 8:47 PM
|
|
|
|
|
I've added some explanation up there:
[ADDED]
If str variable in _tmain function in this line:
char* str = "Some encoded string";
is not so long we're getting Xml.
But, if str is very long, the error comes up.
[/ADDED]
|
|
|
|
|
"decode" function is relevant because it's placed in this function:
int _tmain(int argc, _TCHAR* argv[])
{
char *xml = (char*)malloc(5000000*sizeof(char));
char* str = "Some encoded string";
int length = strlen(str);
decode(str, xml);
printf("Decoded = %s",xml);
int vol = strlen(xml);
return 0;
}
|
|
|
|
|
Please avoid using things like:
char* str = "A string literal here";
If you define it this way, it should be defined as a const char*. If it needs to be editted, define it as a char array with a large enough size.
Also, why are you calling pIDec->Decode(&k1,&k2); . Why not just pIDec->Decode(k1,k2); ? And then... why are you defining Decode as a function with one parameter and yet calling it with two parameters?
|
|
|
|
|
As Luc Says, it shoul be no problem. To help any further we would need to see the unmanaged function signature.
|
|
|
|
|
Yes. I've just posted it up there.
|
|
|
|
|
Hallo
my application sports a dgv bound to a datatable, which has a column with default value to DateTime.Now.
When the user add a new row, that datetime column is correctly filled; when the user saves for the first time, it correctly saves. Any next time the user try saving the row, it gives a System.FormatException "String not recognized as valid DateTime value", and stops saving.
The DateTime in the DGV appears to be formatted according the locale Culture (italian, dd/MM/yyyy hh.mm)
The DataTable.Locale is System.Globalization.CultureInfo.InvariantCulture.
If I change it to System.Globalization.CultureInfo.CurrentCulture i get an obscure exception "Found unknown word starting at index 0".
Any help?
Thanks in advance!
|
|
|
|
|
Do you have a DateTimePicker in the DataGridViewCell or is it a default DataGridViewCell (Text) Field?
You may need to convert the value to a valid Date Type.
I don't speak Idiot - please talk slowly and clearly
'This space for rent'
Driven to the arms of Heineken by the wife
|
|
|
|