|
What happens if the tax rates or limits change? The data should be stored in a table somewhere, and read in at run time - you would then store it in a class or structure like this:
public class TaxRates
{
public double UpperLimit;
public double LowerLimit;
public double Deductible;
public double CalcRate;
} Populate a list of these from your table and then all you need do is iterate looking for the value where the value is between lower and upper and then use this to form the basis of your calculation. Also, you should note that your sample code has holes in it. What happens if someone earns 10164.01?
|
|
|
|
|
Pete O'Hanlon wrote: What happens if the tax rates or limits change? The data should be stored in a table somewhere, and read in at run time
I agree. Hard coded values in programs should always be kept to a minimum.
"Any sort of work in VB6 is bound to provide several WTF moments." - Christian Graus
|
|
|
|
|
Question: best place to obtain return code from a proxy
I am enhancing on a C# 2008 application that calls a web service. This application was written by the contract shop that has the web service. I am just adding what I need to this application for my company's needs.
One change I am making is for my company to have a tracking table. This table is used to keep track of the types of calls that have been made to the web service for each of our customers.
"My question is the best place to obtain the return code from the web service".
Right now there is a proxy that is used in this application to call the web service. The proxy contains the return code from the web service.
Thus I am looking for best place to obtain the return code from the proxy and how would you make the coding change from the list below and/or other options you can think of:
1. Can I put my code in the proxy? I would not touch the exact location where the web service is called. Is this a good idea or not?
2. When I use the proxy I would change it to a function. The value returned from the function call would be the value I am looking for.
3. I would pass an extra parameter to the proxy call to it would give me the return code. if I chose this option, how would I obtain the value that is optional a return value from the proxy call?
|
|
|
|
|
It depends. It *always* depends.
I would try to look for a solution that could keep the tracking stuff separate from the proxy. Proxies usually aren't hand-coded and it's quite convenient to just "update" a "service reference" in order to generate new proxy code should the service interface change.
Assuming you only use a few operations on the service, the easiest seems to me to be adding a thin abstraction layer on top of the proxy and put the tracking logic there.
A few tips for how to do such refactoring speedily:
- Rename the proxy class to whatever you want your new class (implementing the abstraction layer) to have, using Refactor => Rename. This will update all the call sites.
- Rename the class back to what it was originally called, WITHOUT using Refactor => Rename.
Every place in the code where you had new Proxy() you now have new AbstractionLayer(). (Please don't use that name. Name it according to what function it has.)
Introduce the new class and put your tracking logic there. In short, you've built a proxy for the proxy.
|
|
|
|
|
Thank you, this saves me having to answer the question. Of course, I would use the term Facade rather than AbstractionLayer. My 5 anyway.
|
|
|
|
|
Well that's what we get with metaphores. If you're speaking pattern what you're saying may be well-defined, but as long as we just use metaphores things are always kinda vague.
A proxy is a kind of facade and also a kind of abstraction layer, wouldn't you say?
But to my mind, the facade metaphor is a little inappropriate here because the thing about a facade is that it looks completely different from what it's hiding. That's usually the point of having a facade, to cover the ugly stuff. A proxy on the other hand looks just like the thing it is a proxy for. So here I think we're making a proxy for the proxy. But rather than start explaining all this and use "metaproxy" I resorted to the more general conception of an abstraction layer.
Of course, in practice one would only expose those bits of the interface that one actually uses. So then I suppose it kinda acts as a facade too...
Gee it's hard to say anything sensible about this stuff. As a programmer one ventures to the borders of philosophy all the time. But then that's one of the things I find appealing!
|
|
|
|
|
So you think that the proxy should expose a few values like the return code so that I can use it correct?
|
|
|
|
|
I'm not sure what you mean by that. It should "expose" the return value *as* a return value. Externally, it's useage should be identical to your original proxy, but internally it should call the proxy, update tracking information, and return whatever the proxy returned.
Perhaps we are talking past one another. What I mean is you have some generated proxy like this:
class Proxy
{
public int Foo()
{
}
}
and some code that uses it,
class UserCode
{
void Bar()
{
var x = new Proxy().Foo();
}
}
You can now introduce a "metaproxy",
class MetaProxy
{
int clientID;
Proxy proxy = new Proxy();
public MetaProxy(int clientID)
{
this.clientID = clientID;
}
public int Foo()
{
var x = proxy.Foo();
Tracking.Register("Foo", clientID, x);
return x;
}
}
Lastly of course the user code must be modified to use MetaProxy instead of Proxy.
I don't know the details of what sort of tracking you really need to do. Nor do I know, or want to know , everything needed to say if this is how you should obtain the information you need (examplified by "clientID"). If you have this information everywhere you are making such calls, perhaps this is a good way of doing it. If you don't, and this is in an application processing requests (so that everything that happens in a thread happens on behalf of a particular client) perhaps it'd be nice to put the clientID in a ThreadStatic instead, and then your MetaProxy could just have a default constructor and sniff out the clientID from there.
So you still have to do your own thinking. But hopefully this will make it clear how I propose you can establish tracking. Of course just keeping track of things is not going to do anything more than that.
|
|
|
|
|
Hi,
I have a requirement to render the contents from excel to word. With a condition that the content after rendering to word should look like they way it is displayed in print preview mode of excel. Can anybody help me on this?
To give additional information, I need the properites set in excel also to be rentered while rendering to word.
For example: If the mode is set to landscape in excel I want the same mode to be set in word after rendering. Similar with boarders, margins, print area and scalings.
Thanks
Ullas Joseph
|
|
|
|
|
Hi,
I think you are supposed to use the microsoft.interop.excel and the microsoft.interop.word DLL. They are installed with the MS Office Suite and depend on the office suites' version.
You can add them in your Visual Studio project via COM.
Hope my tip helps
Marco
|
|
|
|
|
Is there any property or any option that needs to be checked in order to display the sheet name in the rendered output of an excel document. I am doing a Excel "Save As" to PDF format.
|
|
|
|
|
Are you trying to do this through code?
|
|
|
|
|
In a C# 2010 application, I am currently using the following to statements to select files for *summ.xls files.
string[] files = Directory.GetFiles(C:\temp\09_20_2012\CUSTOMER1, "*summ.xls",SearchOption.AllDirectories);
string[] files = Directory.GetFiles("C:\\temp", "*summ.xls", SearchOption.AllDirectories);
However now I need to exclude the following kind of files from the next directory search:
1. *summ.xlsx,
2. *report.xlsx,
and
3. invalid*.xlsx. In this case the files start with the word invalid and the rest of the file name can be anything. However these files are also of type *.xlsx.
Thus for like the statement,
"string[] files = Directory.GetFiles("C:\\temp", "*summ.xls", SearchOption.AllDirectories);", can you tell me how would I change the statement above to exclude the specific file names I just listed above?
Can you show me how to make this coding change and/or point me to a reference I can use to solve the problem?
modified 10-Oct-12 0:01am.
|
|
|
|
|
See her:
http://msdn.microsoft.com/en-us/library/ms143316.aspx
From description it is not possible. I would use EnumerateFiles method instead and then linq Where with maybe RegExp for file name pattern.
No more Mister Nice Guy... >: |
|
|
|
|
|
There is no direct way to do it - the GetFiles method does not provide an "except files matching this" option.
Personally, I would do a "straight" GetFiles, then post process the list to remove the exceptions: in your case it is a pretty simple loop or Linq statement - remember that the Path class will extract the file name and extension separately for you with the Path.GetFileNameWithoutExtension[^] and Path.GetExtension[^] methods
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
I am new to web development. I am trying to write a web application that a user can click on 2 boxes and program should draw a line between them. I have no clue on how to start this project. Any help is much appropriated.
How is google map written? how can they draw shapes and users can click on it? Would like my app to behave the same way.
Thanks in advanced.
|
|
|
|
|
Are you really sure you wrote this in the right forum? You wouldn't do this using C# - you would use JavaScript for this.
|
|
|
|
|
Thanks for the response Pete.
So what you are saying is this functionality is not possible with c#. I though I could do this in C# since I have done similar functions with a Win Forms.
What I thought I could create a embedded object (such as ActiveX) and go in that route. So that was a wrong thinking.
So I should try this in JavaScript or HTML5?
|
|
|
|
|
If you don't just want it to run in IE on Windows, you shouldn't use ActiveX. If you look at Google Maps (for instance), you will see that they make extensive use of JavaScript.
|
|
|
|
|
I think this correct solution for ur problem bro there will be control in wind froms called web browser i think it will help u well
and u should import class library called using.system.diagonstic()
|
|
|
|
|
A couple of points. First, when answering questions in the forums, it is best not to use text speak. This is looked on as unprofessional, and will often result in people downvoting your answer.
Secondly, it is important to consider what the user is actually asking. He has asked how to draw on a web page, and your answer has absolutely nothing to do with drawing on a web page. I commend you for wanting to help out, but it's better not to answer than to give completely the wrong answer.
|
|
|
|
|
I'm working with an Infragistics UltraTree. The types loaded into the tree are each stored on the node's Tag property. I want to activate a node based on a particular instance of a type.
So far I have:
public void SelectNodeByEntity<T>(T Entity)
{
UltraTreeNode node = GetNode(UltraTree1.Nodes, Entity);
if (node != null)
{
UltraTree1.ActiveNode = node;
}
}
private UltraTreeNode GetNode<T>(TreeNodesCollection Nodes, T Entity)
{
UltraTreeNode retVal = null;
foreach (UltraTreeNode node in Nodes)
{
var entity = (T)node.Tag;
if (entity == Entity)
{
return node;
}
else
{
if (node.Nodes.Count > 0)
{
return GetNode<T>(node.Nodes, Entity);
}
}
}
return retVal;
}
But it won't compile on the line indicated above with "Operator '==' cannot be applied to operands of type 'T' and 'T'".
How do I pull the object off the tag, convert it to type T and compare it with the type passed in to see if their the same?
Thanks
If it's not broken, fix it until it is
|
|
|
|
|
Try using .Equals instead. == isn't allowed when comparing generic types (in the same way as you can't use ++ or --).
|
|
|
|
|
That did it. Thanks Pete!
If it's not broken, fix it until it is
|
|
|
|
|
Not a problem. I'm glad I could help.
|
|
|
|