Link to home
Start Free TrialLog in
Avatar of stephen_rota
stephen_rota

asked on

trying to avoid System.ArgumentOutOfRangeException dropdown list in a datagrid

hello dear experts,
i have  a problem with a dropdown list in a datagrid, basically i am trying to avoid the:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: value
Source Error:
Line 67:                         
Line 68:                         BOMDataGrid.DataSource = DS.Tables["BOM"];
Line 69:                         BOMDataGrid.DataBind();      ----> marked red

after readings some replies here i added the GetSelectedValue function.

<asp:datagrid id="BOMDataGrid" runat="server" AutoGenerateColumns="False" OnEditCommand="Edit"             OnCancelCommand="Cancel" OnUpdateCommand="Update" OnDeleteCommand="Delete">
......
         <asp:DropDownList id="MaterialDDL" runat="server" DataSource='<%# MaterialDT%>' DataTextField="Material" DataValueField="ID" SelectedValue='<%# GetSelectedValue(DataBinder.Eval(Container, "DataItem.MaterialID"))%>'>
         </asp:DropDownList>

public String GetSelectedValue(object selVal)
{      
     if (selVal.Equals("") || selVal==null)
         return null;
     else
         return selVal.ToString();                              
}

i have a:
public DataTable MaterialDT; in the .cs

and am calling GetData() to populate and bind the datagrid and to poulate the datatable for the dropdownlist:MaterialDT.


            void GetData()
            {                  
                        SqlCommand dataCommand = new SqlCommand();
                        SqlConnection dataConnection = new SqlConnection();
                        dataConnection.ConnectionString = dbConn;
                        dataCommand.Connection = dataConnection;                  
                        
                        dataCommand.CommandText = "GetMaterials";
                        dataCommand.CommandType = System.Data.CommandType.StoredProcedure;      
                  
                        SqlDataAdapter MaterialDA = new SqlDataAdapter(dataCommand);
                        MaterialDA.Fill(DS,"Material");

                        MaterialDT = DS.Tables["Material"];
                        
                        SqlParameter reportIDprm;
                        reportIDprm= new SqlParameter("@reportID",1);                  
                        dataCommand.Parameters.Add(reportIDprm);

                        dataCommand.CommandText = "GetBOM";
                        dataCommand.CommandType = System.Data.CommandType.StoredProcedure;      

                        BOMDA = new SqlDataAdapter(dataCommand);
                        BOMDA.Fill(DS,"BOM");
                        
                        BOMDataGrid.DataSource = DS.Tables["BOM"];
                        BOMDataGrid.DataBind();      <-----------------------error here                  
                  /*
                  }
                  catch(ArgumentOutOfRangeException OutOfRange)
                  {
                        Label1.Text = OutOfRange.Message;
                  }
                  catch(Exception e)
                  {
                        Label1.Text = e.Message;
                  }
                                         */
            }
but am still getting the error on pressing the edit button in the datagrid on items that were added with the add material button:
which only has this at its end:

BOMDataGrid.EditItemIndex = -1;
GetData();      

hope you might help, 10x in advance.


 

ASKER CERTIFIED SOLUTION
Avatar of GENTP
GENTP

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of stephen_rota
stephen_rota

ASKER

no i did not try that one.  My first impression was that the datagrid (i.e. due to the editItemIndex as you are noting) was causing the outofrange exception. but then on following some posts on your site I got the impression (and continued to convince myself of this after some testing) that the dropdown list was causing that excepiton since there were no itmes selected (something on the same argument as what happens with the HTML select or raedio buttons i.e. there is no value for the dropdown unless anything is selected) hence I introduced the GetSelectedValue function. However I will try setting edititemindex to 0 tomorrow morniing and reply with the outcome. -1 resets the datagrid to a no edit mode right? 10x.
the prob was when have an unselected dropdown. solved this by defaulting the dropdown list to a selection of none. i am getting the value, text from a DB so i just added an entry of id: -1, desc: none. 10x.