i have written this in else condition ..can anyone please check this...

else

            if (DDlDepartment.SelectedValue != null && DDLStaffid.SelectedValue != null)
            {
                con.Open();
                string str1 = DDlDepartment.SelectedValue;
                string str2 = DDLStaffid.SelectedValue;
                


SqlDataAdapter ad1 = new SqlDataAdapter("Select * from ManstaSalary where  Department='" + str1 + "'and StaffID= '" + str2 + "'", con);
                DataSet ds1 = new DataSet();
                ad1.Fill(ds1);

                GridView1.DataSource = ds1;
                GridView1.DataBind();
                con.Close();
            }

Dani AI

Generated

Short expert note: is correct about condition order — the most specific test (both department and staff selected) must come first. Since tried swapping and still saw the else-if never run, the next likely causes are dropdown rebinding on every postback or using the wrong presence check (comparing to null). 's request for Page_Load was on point: inspect where the lists are bound.

Common fixes and checks

  • Ensure dropdowns are only populated when the page first loads (wrap binding in if (!IsPostBack)), otherwise the selected value will be reset before the button handler runs.
  • Don’t test SelectedValue != null: DropDownList usually returns an empty string or a default value rather than null. Prefer SelectedIndex > 0 when a “Please select” item is at index 0, or !string.IsNullOrWhiteSpace(ddl.SelectedValue).
  • Order the tests: both-selected first, then department-only, then the default/all-data branch.

Safer pattern (build the WHERE clause and use parameters)

bool hasDept = DDlDepartment.SelectedIndex > 0;
bool hasStaff = DDLStaffid.SelectedIndex > 0;
string sql = "SELECT * FROM ManstaSalary";
var where = new List<string>();
if (hasDept) where.Add("Department = @dept");
if (hasStaff) where.Add("StaffID = @staff");
if (where.Any()) sql += " WHERE " + string.Join(" AND ", where);
// use SqlCommand with parameters and a using block to fill a DataTable and bind the GridView

Troubleshooting tips

  • Add a breakpoint at BtnSubmit_Click and QuickWatch SelectedIndex/SelectedValue for both lists.
  • Confirm there is no later code that rebinds the lists before query runs.
  • Use parameterized queries and using blocks to avoid SQL injection and ensure connections are closed.

Summary: reorder checks (both-first), fix the presence-check (SelectedIndex or IsNullOrWhiteSpace), and stop rebinding on every postback — that combination resolves this class of problems.

Recommended Answers

All 11 Replies

Hello again.
Same question,
Can you show Page_Load() event?
Cheers

"If" condition is working but "else if" condition is not working..i am not understanding vats the problem is ..

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class Management_Staff_Salary_Details : System.Web.UI.Page
{


    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void BtnSubmit_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConsString"].ConnectionString);

        //string sql = "Select * from ManstaSalary";
        //SqlCommand cmd = new SqlCommand(sql, con);


        if (DDlDepartment.SelectedValue != null)
        {
            con.Open();
            string str = DDlDepartment.SelectedValue;
            //string sql = "Select * from ManstaSalary where Department= '" + str+"'" ;

            SqlDataAdapter ad = new SqlDataAdapter("Select * from ManstaSalary where Department= '" + str + "'", con);
            DataSet ds = new DataSet();
            ad.Fill(ds);
            GridView1.DataSource = ds;
            GridView1.DataBind();
            con.Close();
        }

        else if ((DDlDepartment.SelectedValue != null) && (DDLStaffid.SelectedValue != null))
        {
            con.Open();
            string str1 = DDlDepartment.SelectedValue;
            string str2 = DDLStaffid.SelectedValue;
            //string sql1 = "Select * from ManstaSalary where Department='" + str1 + "'and StaffID='" + str2+ "'";


            SqlDataAdapter ad = new SqlDataAdapter("Select * from ManstaSalary where  Department= '" + str1 + "' and StaffID = '" + str2 + "'", con);
            DataSet ds = new DataSet();
            ad.Fill(ds);

            GridView1.DataSource = ds;
            GridView1.DataBind();
            con.Close();
        }
    }
}

Your second condition will never be true, you need to swap them around. The if statement starts at the first condition and works its way down until one matches. In your case if DDLDepartment.SelectedValue is not null it will match the first. The only way your else statement will be checked is if DDLDepartment.SelectedValue IS null, in which case the condition fails and the statement wont run.

If you swap them around, if both are not null it will match and run query. If DDLStaffid.SelectedValue is null then the first condition will fail and the second will be checked, running if DDLDepartment.SelectedValue is not null.

You should probably move your original "Select * from ManstaSalary" query down into a final else statement so if both conditions fail it loads all data.

Again, you could have avoided the if statements if you had taken the time to examine the flexible search query i showed you in your original post.

i have given as what you have said..but its not working.. will u please send me "if" condition in else part..

You have swapped the if and else conditions around?
What isnt working now?
Please post the revised snippet of code and highlight the part that is not working correctly.

i have given staffid as null.. i dnt know how to swap..help me

else if ((DDlDepartment.SelectedValue != null) && (DDLStaffid.SelectedValue != null))

Just switch the two blocks of code around:

if ((DDlDepartment.SelectedValue != null) && (DDLStaffid.SelectedValue != null))
{
   ...
}
else if (DDLDepartment.SelectedValue!=null)
{
   ...
}
else
{
   //default query
}

As i said, the if..else statement works top down. It will run the first block of code whose condition equates to true, so you should always start with the most specific conditions and move down the list getting less specific.

i have given as the same but its not working..the "else if" condition is not working...

your code looks like mine? Have you debugged to check the values for DDLDepartment.SelectedValue and DDLStaffid.SelectedValue?

ya i did but its not getting...

not getting what? I'm sorry, but can you try to be more descriptive with your answers. We can only help you if we know exactly what the problem is and without seeing your full code we only have your psots to guide us.

Insert your breakpoint and examine (Quick Watch) your drop down lists at the point where you are about to enter your if..else block.
Its possible tt SelectedValue isnt being set as you expect it to be. Are your dropdownlists populated manually or are they databound?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.