Solved

Capture value from combo box column in datagridview

Posted on 2014-02-18
4
1,504 Views
Last Modified: 2014-02-19
I have a datagridview that is databound.  Once the view is populated via call to a SQL DB I append a combobox column to the end of it. using this code:

'Code to add column to the end of the databound datagridview
CreateUnboundDropDownColumn(mydatagridview, "Assigned", mydatagridview.ColumnCount)

'Sub that adds the column on
Private Sub CreateUnboundDropDownColumn(ByVal DataGridView As DataGridView, ByVal ColumnName As String, ByVal ColumnIndex As Integer)

 Dim ComboboxColumn As New DataGridViewComboBoxColumn


        With ComboboxColumn
            .HeaderText = ColumnName
            .Name = "col_" & ColumnName
            .Items.Add("Value1")
            .Items.Add("Value2")
            .Items.Add("Value3")
            .Items.Add("Value4")
            .Items.Add("Value5")

        End With

        ' Add the combobox column to the control.
        DataGridView.Columns.Insert(ColumnIndex, ComboboxColumn)

Open in new window


This all works fine but when I then try to capture the value in this new column to pass to a class that saves back to the database I get the famous "object not set to an instance of an object".  

I set the value in this manner.

For intX As Integer = 0 To mydatagridview.Rows.Count - 1

                            Dim Assigned As String

If dgv_CashAdjustment.Item(13, intX).Value.ToString = "" Or dgv_CashAdjustment.Item(13, intX).Value Is Nothing Then
                                Assigned = ""
                            Else
                                Assigned = dgv_CashAdjustment.Item(13, intX).Value.ToString()
                            End If

mysaveclass.Assigned=Assigned

mysaveclass.PerformSaveRoutine

Open in new window


I have double checked that column 13 is the correct column index so that isn't it.

The error occurs when I assign the value because I get the same error even if I simply try to read the value (ie. MessageBox.Show(mydatagridview.Item(13, intX).Value.ToString))
0
Comment
Question by:pensiongenius
4 Comments
 
LVL 7

Expert Comment

by:Kishan Zunjare
ID: 39869430
since there is null value in mydatagridview.Item(13, intX).Value, because of this you are getting object reference error. First you have to check for null and then convert to String.

-Kishan
0
 
LVL 11

Expert Comment

by:SAMIR BHOGAYTA
ID: 39869712
hi..Please try with this example

SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["DbConnect"].ToString());

    SqlDataAdapter sqladp = new SqlDataAdapter();
    DataTable dt = new DataTable();
    DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataSet ds=new DataSet ();
            ds = ddlist("Select * from UserDetails");
            Grid_viewprofile.DataSource = ds;
            Grid_viewprofile.DataBind();
        }
    }
    protected void Grid_viewprofile_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Close")
        {
        //    Panel1.Visible = false;
        }
        if (e.CommandName == "Move")
        {
           GridViewRow gvRow = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            DropDownList lstuserName = (DropDownList)gvRow.FindControl("ddl_groub");
            Response.Write("Selected Value : " + lstuserName.SelectedValue + " " + "Selected Item : " + lstuserName.SelectedItem.Text);  
        }
    }
    public  DataSet   ddlist(string Qry)
    {
        DataSet ds = new DataSet();
        SqlDataAdapter sqladp = new SqlDataAdapter(Qry, sqlcon);
        sqladp.Fill(ds);
        return ds;
    }
    protected void Grid_viewprofile_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList  ddl = (DropDownList)e.Row.FindControl("ddl_groub");
            ddl.DataSource = ddlist("Select * from UserDetails");
            ddl.DataTextField = "UserName";
            ddl.DataValueField = "ID";
            ddl.DataBind();
            ddl.Items.Insert(0, new ListItem("--Select--", "0"));
        }
    }
}

Client Side  :
<asp:GridView ID="Grid_viewprofile" CellPadding="4" ForeColor="Black"  
        runat="server" AllowPaging="true" PageSize="1"
    AutoGenerateColumns="false" onrowcommand="Grid_viewprofile_RowCommand"
     onrowdatabound="Grid_viewprofile_RowDataBound">
    <Columns>
    <asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="UserName" HeaderText="UserName" />
     <asp:TemplateField HeaderText="Profile_Status">
    <ItemTemplate>
        <asp:DropDownList ID="ddl_groub" runat="server">
        </asp:DropDownList>
        <asp:Button ID="btn_move" runat="server" Text="Move to group"  CommandName="Move" />
        <asp:Button ID="btn_close" runat="server" Text="Close"  CommandName="Close"/>
    </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>
0
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 500 total points
ID: 39870215
Change line 5 from

If dgv_CashAdjustment.Item(13, intX).Value.ToString = "" Or dgv_CashAdjustment.Item(13, intX).Value Is Nothing Then

to

If String.IsNullOrEmpty(dgv_CashAdjustment.Item(13, intX).Value) Then
0
 

Author Closing Comment

by:pensiongenius
ID: 39870568
Thanks Experts.  This solution was concise and to the point and did exactly what I needed.
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

For most people, the WrapPanel seems like a magic when they switch from WinForms to WPF. Most of us will think that the code that is used to write a control like that would be difficult. However, most of the work is done by the WPF engine, and the W…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

825 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question