Reputation: 575
I have a problem in code in C#:
I don't know how to implement logic - iterating through Hashtable having values of different data types, the schema I want is below:
if the value in variable is String type
{
do action1;
}
else
{
do action2;
}
There is a hashtable containing data of Types - String and Int (combined):
public string SQLCondGenerator {
get
{
Hashtable conditions = new Hashtable();
//data having String data type
conditions.Add("miap", ViewState["miap_txt"]);
conditions.Add("pocode", ViewState["po_txt "]);
conditions.Add("materialdescription", ViewState["mat_desc_txt"]);
conditions.Add("suppliername", ViewState["supplier_txt"]);
conditions.Add("manufacturername", ViewState["manufacturer_txt"]);
//data having Int32 data type
conditions.Add("spareparts", ViewState["sp_id"]);
conditions.Add("firstfills", ViewState["ff_id"]);
conditions.Add("specialtools", ViewState["st_id"]);
conditions.Add("ps_deleted", ViewState["ps_del_id"]);
conditions.Add("po_manuallyinserted", ViewState["man_ins_id"]);
String SQLCondString = "";
String SQLCondStringConverted = "";
string s = string.Empty;
foreach (string name in conditions.Keys)
{
if (conditions[name] != null)
{
SQLCondString += name+ "=" +conditions[name]+ " and ";
Response.Write(conditions[name].GetType());
bool valtype = conditions[name].GetType().IsValueType;
if (valtype == string)
{
SQLCondString.Substring(0, SQLCondString.Length - 4);
SQLCondString += name + " and like '%" + conditions[name] + "%' and ";
}
}
}
//Response.Write("********************");
SQLCondStringConverted = SQLCondString.Substring(0, SQLCondString.Length - 4);
return SQLCondStringConverted;
}
}
May be I am wrong in coding, please advise!
Thanks!
Upvotes: 33
Views: 93386
Reputation: 76
I had the same issue but I was using textBoxes and needed to validate if the input is alphabets,-, or .
I generated a keypress event on my textBox and inserted the following method to check each keypress and give a prompt if its not a valid character:
public static class Validator
{
public static bool IsNameString(TextBox tb, string name, KeyPressEventArgs e)
{
bool valid = true;
/* e.KeyChar contains the character that was pressed
e.Handled is a boolean that indicates that handling is done
if a bad character is entered, set e.Handled to true
*/
if (!char.IsLetter(e.KeyChar) && e.KeyChar != ' ' && e.KeyChar != '-' &&
e.KeyChar != '.' && e.KeyChar != (char)Keys.Back)
{
e.Handled = true;
valid = false;
MessageBox.Show(name+ " can only accept letters, space, - and .");
tb.Focus();
}
return valid;
}
}
usage:
private void txtCustomerName_KeyPress(object sender, KeyPressEventArgs e)
{
Validator.IsNameString(txtCustomerName, "Customer Name", e);
}
Upvotes: 0
Reputation: 131
Int32 Val = 0;
if (Int32.TryParse("Your Value", out Val))
{
//Your Logic for int
}
else
{
//Your Logic for String
}
Int32 Val = 0;
dynamic conditions = new Hashtable();
conditions.Add("miap", ViewState["miap_txt"]);
conditions.Add("pocode", ViewState["po_txt "]);
foreach (string name in conditions.Keys)
{
if (Int32.TryParse(conditions[name].ToString(), out Val))
{
//Your Logic for int
}
else
{
//Your Logic for String
}
}
Upvotes: 2
Reputation: 31097
Hmm, I'm not sure why you are calling IsValueType
, but this should be sufficient:
if (conditions[name] is string)
{
///
}
Upvotes: 11