|
Thanks guys for the answers. Very helpful!
NATHAN RIDLEY
Web Application Developer
email: nathan @ netlab.com.au
[remove the spaces before and after the @ symbol]
|
|
|
|
|
You're welcome!
Regards,
Jeff Varszegi
EEEP!
|
|
|
|
|
hello,
i'm using a dataview to sort my datagrid. My datagrid has a column like this:
DataGridColumnStyle ColLib5 = new DataGridTextBoxColumn();<br />
ColLib5.MappingName = "loadorder";<br />
ColLib5.HeaderText = "Loadorder";<br />
ColLib5.Width = 80;<br />
ts1.GridColumnStyles.Add(ColLib5);<br />
dtgLibrary.TableStyles.Add(ts1);
But when i sort the column, he sorts it like this
1
10
2
3
So not like numbers.
How can i change this?
Thx in advance.
|
|
|
|
|
If you use DataView , numeric fields sort correctlly, your code doesn't show any DataView.
DataView myDataView = DataTable1.DefaultView;
myDataView.Sort = "myColumnName";
Mazy
"One who dives deep gets the pearls,the burning desire for realization brings the goal nearer." - Babuji
|
|
|
|
|
yes that's what i'm doing but he sorts it wrong because he seems to think the column isn't numeric :-s
|
|
|
|
|
The DataColumn.DataType must also be set to a numeric Type . If you create a typed DataSet using either VS.NET or the xsd.exe .NET Framework SDK utility, this is done automatically for you if the XML schema declared a numeric type. Otherwise, your numbers are treated like text, which would be sorted as you're seeing now.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
i believe it worked before i started using this:
DataGridColumnStyle ColLib5 = new DataGridTextBoxColumn();<br />
ColLib5.MappingName = "loadorder";<br />
ColLib5.HeaderText = "Loadorder";<br />
ColLib5.Width = 80;<br />
ts1.GridColumnStyles.Add(ColLib5);<br />
dtgLibrary.TableStyles.Add(ts1);
I thought maybe because of the DataGridColumnStyle ColLib5 = new DataGridTextBoxColumn(); he thinks it's not numeric. Is there a way to change it?
|
|
|
|
|
Like I said, you have to set the DataColumn.DataType to a Int32 or some other numeric Type. What you're doing there is just defining a column style, not the definition of the column.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have seen a few programs that have great visual effects for the taskbar tray. For instance, when you minimize the main window the window creates trails down to the taskbar tray icon to remind the user where to find the program later. Since the program that I'm writing is residing with the taskbar tray icons I would like to incorporate this effect. Does anyone know how to accomplish this?
The next effect that I'm hoping to achieve can be observed by Norton Anti-virus users. It is an effect where a scrolling window appears above the tray icon informing the user that virus definitions have been updated. I have a very unique application for this effect and I have decided that I must incorporate it. Anybody have a clue on how to achieve that neet effect?
thanks for any clues!
Eli
|
|
|
|
|
For the first part of the question, DrawAnimatedRects . See also http://www.codeproject.com/gdi/drawanimated.asp[^]. Obviously you'll have to use a P/Invoke declaration. Here's some code I cooked up:
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
int left;
int top;
int right;
int bottom;
public static RECT FromLTRB( int l, int t, int r, int b )
{
RECT rc = new RECT();
rc.left = l;
rc.top = t;
rc.right = r;
rc.bottom = b;
return rc;
}
public static RECT FromRectangle( Rectangle r )
{
return FromLTRB( r.Left, r.Top, r.Right, r.Bottom );
}
}
private const int IDANI_CAPTION = 3;
[DllImport("user32.dll")]
private static extern bool DrawAnimatedRects( HandleRef hwnd, int idAni,
[In] ref RECT lprcFrom, [In] ref RECT lprcTo);
private void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
if ( exiting )
return;
e.Cancel = true;
Rectangle boundsRect = Screen.PrimaryScreen.Bounds;
RECT rcFrom = RECT.FromRectangle( Bounds );
RECT rcTo =
RECT.FromLTRB(
boundsRect.Right - 16,
boundsRect.Bottom - 16,
boundsRect.Right,
boundsRect.Bottom );
DrawAnimatedRects( new HandleRef( this, Handle ), IDANI_CAPTION, ref rcFrom, ref rcTo );
Visible = false;
}
private void OnNotifyIconClick(object sender, System.EventArgs e)
{
if ( Visible )
return;
Rectangle boundsRect = Screen.PrimaryScreen.Bounds;
RECT rcTo = RECT.FromRectangle( Bounds );
RECT rcFrom =
RECT.FromLTRB(
boundsRect.Right - 16,
boundsRect.Bottom - 16,
boundsRect.Right,
boundsRect.Bottom );
DrawAnimatedRects( new HandleRef( this, Handle ), IDANI_CAPTION, ref rcFrom, ref rcTo );
Visible = true;
}
private void exit_Click(object sender, System.EventArgs e)
{
exiting = true;
Close();
}
private bool exiting; If you wanted to be really keen, you could try to find out where the task bar actually is, rather than just assuming the bottom of the primary screen as I've done here. See http://vbnet.mvps.org/index.html?code/screen/shappbarmessage.htm[^].
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Heres a quick question, I think I already know what the answer will be (not possible for XYZ reasons), but there is no harm in asking.
Lets say I have a class that contains alot methods I would like the class to log when each of these methods is called and completes.
Normally I would do this by calling a custom AddToLog(string message) codefunction but i am curious to find out if it is possible for the class to perform this on its own (so that I dont have to swap the code with calls to AddToLog()).
To take this concept one step further would it be possible to autolog each line of code.
In the end you would end up with a log something like this
[DATETIME] - Method1() - IN
[DATETIME] - Method1() - string str1 = "hello"; - Line 134
[DATETIME] - Method1() - str1 = method2(str1); - Line 135
[DATETIME] - Method2() - IN
[DATETIME] - Method2() - return str + " world"; - line 267
[DATETIME] - Method2() - OUT
[DATETIME] - Method1() - MessageBox.Show(str1) - Line 136
[DATETIME] - Method1() - OUT
post.mode = postmodes.signature;
SELECT everything FROM everywhere WHERE something = something_else;
> 1 Row Returned
> 42
|
|
|
|
|
MrEyes wrote:
i am curious to find out if it is possible for the class to perform this on its own
No... The reason for this is the HUGE performance hit this would incur outputting a log entry on every line of code or even just function entry and exit.
I would also not recommend adding the AddToLog thing to everything. Instead, use the Debug class Write methods and Assert. The reason for this is the Debug functions are removed when compiling a Release version of your code, and therefore won't affect the performance of the final .EXE.
RageInTheMachine9532
|
|
|
|
|
It is possible, but I'll explain in a direct response.
I just wanted to add that Dave is correct regarding the performance hit. Using Debug.WriteLine , for example, is a good idea. It is, however, removed when the DEBUG pre-proc symbol is not defined. In VS.NET, the default Debug build configuration defines both DEBUG and TRACE, while the Release build configuration defines only TRACE (the Trace class only appears when TRACE is defined).
This is done through the ConditionalAttribute and is a compiler features (compilers can choose to support it).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
You can, but as Dave mentioned this is a serious performance hit, especially if you don't want to add those log lines (in which case using Debug.WriteLine or Trace.WriteLine is a better idea since you can enable them conditionally, though the call is made each time anyway).
The concept is known as AOP. Basically, your component resides in a different context, which requires that all parameters are marshalled across context boundaries. This can be very expensive, but gives you the flexibility to add aspect-oriented message handlers. There was an article on MSDN about this not so long ago (several others on others sites, too). See AOP: Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse[^] in MSDN Magazine online.
Marc here on CP also has a great article covering AOP, Aspect Oriented Programming / Aspect Oriented Software Design[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi Gurus! Please help me with little problem I got..
I do following thing to send data to php page through POST method:
HttpWebRequest myHttpWebRequest = (HttpWebRequest )WebRequest.Create(@"http://www.umc.ua/misc/sendsms.php");
string postData="?network1=UMC&Phone1=5918658&Message=HellofromCSharp&sender_name=sn";
ASCIIEncoding encoding=new ASCIIEncoding();
byte[] byte1=encoding.GetBytes(postData);
// Set the content type of the data being posted.
myHttpWebRequest.ContentType="application/x-www-form-urlencoded";
// Set the content length of the string being posted.
myHttpWebRequest.ContentLength=postData.Length;
Stream newStream=myHttpWebRequest.GetRequestStream();
newStream.Write(byte1,0,byte1.Length);
RES_text.Text = "The value of 'ContentLength' property after sending the data is {0}" + myHttpWebRequest.ContentLength.ToString();
// Close the Stream object.
newStream.Close();
BUT when I click send buton which invokes this code, following exception occurs:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type.
at System.Net.HttpWebRequest.BeginGetRequestStream(AsyncCallback callback, Object state)
at System.Net.HttpWebRequest.GetRequestStream()
at sm.Form1.heath_Click(Object sender, EventArgs e) in c:\test projects\sm\form1.cs:line 281
at System.Windows.Forms.Control.onclick(EventArgs e)
at System.Windows.Forms.Button.onclick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
sm
Assembly Version: 1.0.1578.33862
Win32 Version: 1.0.1578.33862
CodeBase: file:///C:/Test%20Projects/sm/bin/Debug/sm.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
www.xedom.com
|
|
|
|
|
As I mentioned before, drop the preceeding "?" in postData :
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.umc.ua/misc/sendsms.php");
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded";
string postData =
"network1=UMC&Phone1=5918658&Message=HellofromCSharp&sender_name=sn";
byte[] buffer = Encoding.ASCII.GetBytes(postData);
request.ContentLength = buffer.Length;
Stream s = request.GetRequestStream();
s.Write(buffer, 0, buffer.Length);
s.Flush();
s.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Great thanx! It works now. One more thing: data posted but my WinForm Application hangs after that...
www.xedom.com
|
|
|
|
|
Then you've got some code that isn't finishing execution. Step through your code and find out on which line it "hangs" (blocks). If you're making synchronous calls, execution of the code is done in the same thread that your control was created in (the UI thread), so nothing else happens (no response to user input, typically no painting, etc.) until that code finishes executing.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have commented last line of the code and all works fine for now:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.umc.ua/misc/sendsms.php");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string postData = "network1=UMC&Phone1=5918658&Message=We did it! &sender_name=sn";
byte[] buffer = Encoding.ASCII.GetBytes(postData);
request.ContentLength = buffer.Length;
Stream s = request.GetRequestStream();
s.Write(buffer, 0, buffer.Length);
s.Flush();
s.Close();
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//response.Close();
Could you explain me please for what I need this line-
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
www.xedom.com
|
|
|
|
|
That's what submits the request and gets the response from the server. You can ignore the response if you like, but you really should check the HttpWebResponse.StatusCode to make sure the operation succeeded.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I am looking into porting a COM C++ out of process server to C#. Been looking for an example of an out process server written in C#, can't seem to find any info in MSDN or anywhere else.
Any assistance appreciated.
Thanks in Advance.
Colin
|
|
|
|
|
See Nick's article, Creating a CCW for COM-enabled Non-.NET Applications[^] and follow the same things, paying attention to the note I prompted him to add about not using auto-generated class interfaces.
Then you register the executable as you would a DLL. Take a look at this sample:
using System;
using System.Drawing;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyKeyFile(@"C:\Path\To\KeyFile.snk")]
namespace Test
{
[Guid("0eea66bf-21bf-4c8c-8678-ad58106343a7")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITest
{
[DispId(0)]
DialogResult ShowDialog();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("861e1098-7705-4686-945e-236a0ef439ef")]
[ProgId("Test.Test")]
public class Test : Form, ITest
{
static void Main()
{
Application.Run(new Test());
}
public Test()
{
SuspendLayout();
Text = "Out-of-Proc Server Test";
Label lbl = new Label();
Controls.Add(lbl);
lbl.Location = new Point(8, 8);
lbl.Text = "Hello, world!";
ResumeLayout();
}
}
} Compile it and run:
regasm.exe /tlb /codebase Test.exe Finally, I create a very simple JScript file that I ran with cscript.exe (Windows Scripting console host):
var test = new ActiveXObject("Test.Test");
test.ShowDialog(); The important thing is that your interfaces are dispatch interfaces (or dual) so that the script engine can find and invoke your members.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath,
Thanks for the reply, I looked at Nicks Article, following the same things and using the sample I could not get it to run out of process.
A better description of what I am trying to do might help:
I have built a COM Callable Wrapper (CCW) using Microsoft .NET & C#. The CCW uses attributes to provide a COM interface into a .NET component. This CCW can be created in-process using standard CoCreateInstance calls. However, it is necessary that this CCW runs out-of-process replacing an original COM component built using VC++ as a COM EXE service.
I have used the SDK supplied COMREG sample instead of REGASM to register the component with an AppID indicating that it should be run with a surrogate process – the system supplied surrogate DllHost.EXE.
The CCW can then be created out of process when CoCreateInstanceEx with a local COSERVERINFO address, ie, via DCOM. However, existing clients use standard CoCreateInstance to create the CCW; however standard CoCreateInstance causes the CCW to be created in-process instead of out of process.
Is their a mechanism to force the CCW to be created out-of-process (as if created using CoCreateInstanceEx) with the standard CoCreateInstance call.
I am investigating futher, any further you have to add would be greatly appreciated.
Regards
Colin
|
|
|
|
|
Yeah, I know what an out-of-proc server is. I've been working with COM since it was known as OLE (so to speak). Did you try compiling, registering, and executing the script file I wrote in my reply? It works perfectly fine. You compile it as an exe:
csc /t:exe Test.cs Follow the rest of the instructions and you'll get an out-of-proc server.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I followed your instructions to the letter, and I did not get an out of process server
|
|
|
|
|