[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 611
  • Last Modified:

How to I Rebind DropDownlist to remove selected and list only values not selected

I need to rebind a dropdownlist by removing the bound value that was successuflly use to insert a row Let say 1,2,3,4 after i select 1 i want the list to be 2.3.4
// procedure used to bind
ALTER PROCEDURE [dbo].[adm_GetCustomerIdForDatapark] 
 
 
AS
 
select Distinct customer_id from Trailers 
where NEXT_GEN = 1
 
component for bimding
public DataTable GetCustomer()
        {
            // get a configured DbCommand object
            DbCommand command = GenericDataAccess.CreateCommand();
            // set the stored procedure name
            command.CommandText = "adm_GetCustomerIdForDatapark";
            // execute the stored procedure and return the results
            return GenericDataAccess.ExecuteSelectCommand(command);
        }
 
// code behind that implenent the binding
 private void BindCustomers()
    {
        // Needed to bind the data bound controls to the data source
        ddlCustomer.DataSource = dataparkIntregation.GetCustomer();
 
        ddlCustomer.DataTextField = "Customer_Id";
 
        ddlCustomer.DataBind();
        ddlCustomer.Items.Insert(0, string.Empty);
 
 
    }

Open in new window

0
Projack
Asked:
Projack
  • 4
  • 4
1 Solution
 
Walter RitzelSenior Software EngineerCommented:
You can solve that on a SQL level, if when you select a value you add it to another table OR you remove the value from the current list.
0
 
ProjackAuthor Commented:
Please demonstratte with this procedure
or i was thinking


ddlCustomer.DataSource = dataparkIntregation.GetCustomer();
ddlCustomer.DataTextField = "Customer_Id";
rebind here
string removed = ddlCustomer.SelectedValue;
ddlCustomer.SelectedValue.Remove(removed);
ddlCustomer.DataBind();
ddlCustomer.Items.Insert(0, string.Empty);
 
Can you help either way to resolve it
 

ALTER PROCEDURE [dbo].[adm_GetCustomerIdForDatapark] 
 
 
AS
 
select Distinct customer_id from Trailers 
where NEXT_GEN = 1
 
 
ddlCustomer.DataSource = dataparkIntregation.GetCustomer(); 
ddlCustomer.DataTextField = "Customer_Id"; 
rebind here
string removed = ddlCustomer.SelectedValue; 
ddlCustomer.SelectedValue.Remove(removed); 
ddlCustomer.DataBind(); 
ddlCustomer.Items.Insert(0, string.Empty);
 
Error
Source Error:
 
 
 
Line 180:            ddlCustomer.DataTextField = "Customer_Id";
Line 181:            string removed = ddlCustomer.SelectedValue;
Line 182:            ddlCustomer.SelectedValue.Remove(removed);
Line 183:            ddlCustomer.DataBind();
Line 184:            ddlCustomer.Items.Insert(0, string.Empty);
 
Can you help either way to resolve it

Open in new window

0
 
ProjackAuthor Commented:
change below gave error
Input string was not in a correct format. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error:

Line 36: // Needed to bind the data bound controls to the data source Line 37: string testCustomerId = ddlCustomer.SelectedValue.ToString(); Line 38: int customerId = Convert.ToInt32(testCustomerId); Line 39: ddlCustomer.DataSource = dataparkIntregation.GetCustomer(customerId); Line 40:

I chage the procedure
 
if @customer_id IS NULL 
select Distinct customer_id from Trailers 
where NEXT_GEN = 1 
else 
Begin 
if @customer_id IS NOT NULL 
select Distinct customer_id from Trailers 
where NEXT_GEN = 1 and @customer_id = 0 
END 
END
 
change the component for binding
 
{ 
// get a configured DbCommand object 
DbCommand command = GenericDataAccess.CreateCommand(); 
// set the stored procedure name 
command.CommandText = "adm_GetCustomerIdForDatapark"; 
// create a new parameter 
DbParameter parameter = command.CreateParameter(); 
parameter.ParameterName = "@Customer_Id"; 
parameter.Value = customerId; 
parameter.DbType = DbType.Int32; 
command.Parameters.Add(parameter); 
// execute the stored procedure and return the results 
return GenericDataAccess.ExecuteSelectCommand(command); 
}
 
change the binding
 
private void BindCustomers() 
{ 
// Needed to bind the data bound controls to the data source 
string testCustomerId = ddlCustomer.SelectedValue.ToString(); 
int customerId = Convert.ToInt32(testCustomerId); 
ddlCustomer.DataSource = dataparkIntregation.GetCustomer(customerId); 
ddlCustomer.DataTextField = "Customer_Id"; 
ddlCustomer.DataBind(); 
ddlCustomer.Items.Insert(0, string.Empty); 
  
}
 
Rebind here
 
/ Needed to bind the data bound controls to the data source 
string testCustomerId = ddlCustomer.SelectedValue.ToString(); 
int customerId2 = Convert.ToInt32(testCustomerId); 
ddlCustomer.DataSource = dataparkIntregation.GetCustomer(customerId2); 
ddlCustomer.DataTextField = "Customer_Id"; 
ddlCustomer.DataBind(); 
ddlCustomer.Items.Insert(0, string.Empty);

Open in new window

0
NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

 
Walter RitzelSenior Software EngineerCommented:
I think you should keep the procedure as it was in the first version.
In the .NET code, you probably have a button that you click or you had set the selectedChange event on the dropdownlist. On either case, in the event you should get the selected index, do your insert operation, then you should ddlX.RemoveAt(ddlX.SelectedIndex);
And you should not do a rebind.
0
 
ProjackAuthor Commented:
I am required to rebind. If it is possible please help
0
 
Walter RitzelSenior Software EngineerCommented:
Ok, if you are required to rebind, then I need to understando how things are working on your code...
- When you select someone on the ddl, what happens? Do you call a code to insert in a table?
- If you insert in a table, do you have a key for that?
- If you dont use a table, what do you do?
0
 
ProjackAuthor Commented:
// stored procedure
ALTER PROCEDURE [dbo].[adm_GetCustomerIdForDatapark]

AS
select Distinct customer_id from Trailers
where NEXT_GEN = 1

 
 

// bind dll
 ddlCustomer.DataSource = dataparkIntregation.GetCustomer();
 
        ddlCustomer.DataTextField = "Customer_Id";
 
        ddlCustomer.DataBind();
        ddlCustomer.Items.Insert(0, string.Empty);
 
// use selected value to insert into table
 protected void btnEnable_Click(object sender, EventArgs e)
    {
        string customerId = ddlCustomer.SelectedItem.Text.ToString();
       
        int chartId;
        bool success = true;
 
        try
        {
 
            if (chkUserSettings.Checked)
            {
                chartId = 55;
 
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
 
            if (chkAllParameters.Checked)
            {
                chartId = 56;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkParameterLookup.Checked)
            {
                chartId = 57;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkParameterHistory.Checked)
            {
                chartId = 58;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkAllMeasurements.Checked)
            {
                chartId = 59;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkMeasurementsLookup.Checked)
            {
                chartId = 60;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkMeasurementsHistory.Checked)
            {
                chartId = 61;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkMeasurementsTrends.Checked)
            {
                chartId = 62;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkHispeed.Checked)
            {
                chartId = 63;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkDigitalsSearch.Checked)
            {
                chartId = 64;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkStatusDigitals.Checked)
            {
                chartId = 65;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkAlarmStatus.Checked)
            {
                chartId = 66;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkInverterStatus.Checked)
            {
                chartId = 67;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkDigitals.Checked)
            {
                chartId = 68;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
            if (chkInverterHistory.Checked)
            {
                chartId = 70;
                success = dataparkIntregation.EnableCustomer(customerId, chartId);
            }
 
        }
        catch (Exception et)
        {
            Session["Error"] = Utility.LogError(et); 
           alertbox(et.Message.ToString());
           Response.Redirect("~/Error.aspx");
 
            throw et;
        }
 
        if (success)
        {
 
            alertbox("Enable Customer is Successfully executed");
           
        }
    }
 
//component thta implenet insertion in to yable
public bool EnableCustomer(string customerId, int chartId)
        {
            // get a configured DbCommand object
            DbCommand customerCommand = GenericDataAccess.CustomerCreateCommand();
            // set the stored procedure name
            customerCommand.CommandText = "adm_EnableCustomer";
            // create a new parameter
            DbParameter parameter = customerCommand.CreateParameter();
            parameter.ParameterName = "@Customer_Id";
            parameter.Value = customerId;
            parameter.DbType = DbType.Int32;
            customerCommand.Parameters.Add(parameter);
            // create a new parameter
            parameter = customerCommand.CreateParameter();
            parameter.ParameterName = "@Chart_Id";
            parameter.Value = chartId;
            parameter.DbType = DbType.Int32;
            customerCommand.Parameters.Add(parameter);
           
            // result will represent the number of changed rows
            int result = -1;
 
            // execute the stored procedure
            result = GenericDataAccess.ExecuteNonQuery(customerCommand);
 
            // result will be 1 in case of success 
            return (result >= 1);
        }

Open in new window

0
 
Walter RitzelSenior Software EngineerCommented:
By the logic I'm seeing on the partial code you are showing, on the btnenable_click you should call those 4 lines again:

ddlCustomer.DataSource = dataparkIntregation.GetCustomer();
ddlCustomer.DataTextField = "Customer_Id";
ddlCustomer.DataBind();
ddlCustomer.Items.Insert(0, string.Empty);

Also, seems that your procedure that list the customers should be a little different, because you need to add some clause that will exclude from the query result the customers that are already enabled.

if you do that, this will work fine.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now