Solved

WPF datagrid with radiobuttons added.  How do I get which has been selected?

Posted on 2013-12-16
1
1,412 Views
Last Modified: 2013-12-17
I'm new to wpf.  I'm using vs 2010 and the code behind is vb.net.  I've created a datagrid that gets a description from a SQL Server table and populates the description to a row with 3 radiobuttons. Each row has a unique groupname for the three radiobutons.  The user can then read the description and select the appropriate button.  

My question is how to do I get which radiobutton was selected in each row using  the code behind?

I set the datacontext of the datagrid to a table and the description field  populates correctly and you can only select one radiobutton in the group but I'm not sure how to determine which was selected in each row.

My xaml is below.


                    <DataGrid Width="Auto" VerticalAlignment="Top" Height="Auto" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" Name="dgrd1">
                    <DataGrid.Columns>
                        <DataGridTemplateColumn Header="Electrical Safety/Lockout/Tagout(LOTO)" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Name="Description1" Text="{Binding Path=DETAIL_DESCRIPTION, Mode=OneWay}" Height="75" Width="250" IsReadOnly="True" TextWrapping="Wrap"></TextBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="PASS" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <RadioButton Name="rdbPass1" Content="PASS" Height="Auto" Width="75" GroupName="{Binding Path=GROUP_ID}"></RadioButton>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="FAIL" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                        <RadioButton Name="rdbFail1" Content="FAIL" Height="Auto" Width="75" GroupName="{Binding Path=GROUP_ID}"></RadioButton>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="NA" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                        <RadioButton Name="rdbNA1" Content="NA" Height="Auto" Width="75" GroupName="{Binding Path=GROUP_ID}"></RadioButton>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="Action Require" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                        <TextBox Name="ActionRequired1" Text="" Height="75" Width="150" IsReadOnly="False" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTemplateColumn Header="Person Responsible" Width="Auto" IsReadOnly="True">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                        <TextBox Name="PersonResponsible1" Text="" Height="75" Width="150" IsReadOnly="False" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>



I've tried:

 For i As Integer = 0 To dgrd1.Items.Count - 1
            For j As Integer = 0 To dgrd1.Columns.Count - 1
                strItem = dgrd1.Items(i).ToString
                Dim s As String = TryCast(dgrd1.Items(i), DataRowView).Row.ItemArray(j).ToString()
            Next
        Next
i can see the fields from my data table, do I need to add columns in my datatable for the radiobuttons?
0
Comment
Question by:bkrbbnsEE
1 Comment
 

Accepted Solution

by:
bkrbbnsEE earned 0 total points
ID: 39723784
After googling I found a solution that works in case anyone else is interested:


For i As Integer = 0 To dataGrid0.Items.Count - 1
            strValues(0) = CStr(i + lastRowCount)
            For j As Integer = 0 To dataGrid0.Columns.Count - 1
                Dim cell As DataGridCell = GetCell(i, j)

                If j = 1 Or j = 2 Or j = 3 Then
                    Dim myrdButton As RadioButton = GetVisualChildx(Of RadioButton)(cell)
                    If myrdButton.IsChecked Then
                        strValues(j) = "YES"
                    Else
                        strValues(j) = "No"
                    End If
                ElseIf j = 4 Or j = 5 Then
                    Dim mytxtBox As TextBox = GetVisualChildx(Of TextBox)(cell)
                    strValues(j) = mytxtBox.Text
                End If
            Next
            dtValues.Rows.Add(strValues)
        Next

'-----------------------------------------------------------------------------------------------------
 Public Function GetCell(row As Integer, column As Integer) As DataGridCell


        Dim rowContainer As DataGridRow = GetRow(row)

        If rowContainer IsNot Nothing Then


            Dim presenter As DataGridCellsPresenter = GetVisualChildx(Of DataGridCellsPresenter)(rowContainer)

            If presenter Is Nothing Then


                dgrd1.ScrollIntoView(rowContainer, dgrd1.Columns(column))


                presenter = GetVisualChildx(Of DataGridCellsPresenter)(rowContainer)
            End If

            Dim cell As DataGridCell = DirectCast(presenter.ItemContainerGenerator.ContainerFromIndex(column), DataGridCell)


            Return cell
        End If

        Return Nothing

    End Function

'-----------------------------------------------------------------------------------------------------
Public Function GetRow(index As Integer) As DataGridRow


        Dim row As DataGridRow = DirectCast(dgrd1.ItemContainerGenerator.ContainerFromIndex(index), DataGridRow)

        If row Is Nothing Then


            dgrd1.UpdateLayout()

            dgrd1.ScrollIntoView(dgrd1.Items(index))


            row = DirectCast(dgrd1.ItemContainerGenerator.ContainerFromIndex(index), DataGridRow)
        End If

        Return row

    End Function

'-----------------------------------------------------------------------------------------------------
   
 Public Shared Function GetVisualChildx(Of T As Visual)(parent As Visual) As T


        Dim child As T = Nothing

        Dim numVisuals As Integer = VisualTreeHelper.GetChildrenCount(parent)

        For i As Integer = 0 To numVisuals - 1


            Dim v As Visual = DirectCast(VisualTreeHelper.GetChild(parent, i), Visual)

            child = TryCast(v, T)

            If child Is Nothing Then




                child = GetVisualChildx(Of T)(v)
            End If

            If child IsNot Nothing Then



                Exit For

            End If
        Next

        Return child

    End Function
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
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…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

758 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now