C# - Determine Which DataRow Bound To DataGridViewRow?
Oct 25, 2010
When I use a DataTable as a DataGridView's DataSource, I often have to find which row(s) a user has selected and read specific values from the DataTable (not the DataGridView). I wanted to know if there is any reliable way of determining which DataRow a DataGridViewRow is bound to especially when the user has sorted the DataGridView on a column other than the default order.
Currently, I use code of this sort:
Dim sorting = ""
If DataGrid.SortOrder <> SortOrder.None Then
'get the actual row if the results are sorted'
sorting = "[" & DataGrid.SortedColumn.Name & "]" &
[Code] .....
I have a DataGridView that is bound to a DataTable thru the code. I want to be able to modify the data when a row is selected from the Grid. How do I reference that row of data from the grid so I can convert it into the DataTable row to be updated? I'm trying to do something like this:
Dim row as DataGridViewRow = DirectCast(dgvAddress.CurrentRow, DataRow) This isn't working. I'm getting an error basically stating that I can't convert a DataGridViewRow into a System.Data.DataRow.
I have a function in VS2008 VB.NET that creates a dataset and reads field values from that were loaded from a SQL Server 2008 database tables. The tables are from varied sources and in some cases particular column/field names are different. Some use a long name; others use a short name. I need to determine whether a short name or a long name is being used.Pseudo code:If row("ShortName") Exists then ReadDataFrom r("ShortName").ToStringElse ReadDataFrom r("LongName").ToStringEnd If
How would I determine if a particular column name exist in a dataset or datarow?
When a user clicks on the add button I do this:-oledrTest = oledstest.tables(0).newrowOn the save I need to know whether they have clicked on the add button or the edit button. In the passed I have set a variable to 1 for add and 2 for edit and on the save if its a 1 I do oledstest.tables(0).add(oledrtest).
Is there anyone who can tell me the code for the below? Receive a lower bound and an upper bound of a range. Also receive a number of random numbers to generate. You must validate
1) the numbers are integers 2) the lower bound is less than or equal to the upper bound 3) the number to generate is positive (i.e., > 0).
Generate this many numbers in the specified range and keep track of how many of each are generated in an array of counters. Once all the numbers have been generated, display in a List Box the number, the raw count data, and the percentage of how many times the number was generated displayed with two decimal places of precision.
I have two datatables with similar structures that I want to make one existing row to be updated from another datatable.
For example, "tableA" has three columns: "one", "two", and "three"; with "one" being the primary key...
and "tableB" has three columns as well: "one", "two", and "three"; with "one" being the primary key.
Say there is a row on tableA that is different than a row on tableB (with a matching primary key). What I wanted to do, as efficiently as possible, is to take the that row from tableB and replace the one on tableA so it'll be modified.
I'm not sure if there's an easier way of doing that instead of using loops for setting the row's items.
For Each row as DataGridView in gridFiles.Rows MsgBox(row.Cells("somekey").Value.ToString) gridFiles.Rows.Remove(row) Next
I will see message boxes, but only for every other row. What I think is happening is that the internal pointer for gridFiles.Rows gets off, because there is 1-fewer rows on the next iteration.
I have a DataGridView that is bound to a DataSet I created from a database table named Contacts. The Contacts table contains a field called StatusId. StatusId is a foreign key to a table called Status. The Status table contains StatusId and StatusName.
tblProductsBindingSource, tblProductsTableAdapter I have delete the tblBindingNavigator,also my DataSet consist of 2 Data Tables namely tblProducts and tblChosenProducts, at this time tblChosenProducts is empty but has all the same Table Style of tblProducts. So at Form Load every things is working fine , what I would like to do is when I click in a cell of dgProducts (the DataGridView on my Form) is to populate my second Data Table(tblChosenProducts) and update it to the database(Invent_14April),
ublic Sub DgProduct_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DgProduct.CellClick
I have an unbound DataGridView control where I have defined the columns at design time.Currently to add a new row I use a like this:
gridname.row.add(value1, value2, value3, value4)
This offends my sense of good programming because if I add a column to the grid or change the order of the columns then I need to alter the line above. What I want to do is to create a new datagridviewrow complete with columns and then populate the values like so:
Just like I do when editing an existing row in the grid.I thought I could do the following:
Dim dr as New DataGridViewRow dr = MyGrid.RowTemplate
I thought this would give me a new row complete with cells but no values. Appartently this is the wrong property. Is there a property that will give me a blank row, but with the cell names/types that have already been defined in the grid defined in the row?Yes, I know I can take an existing row and just clear the values but when this program load, there are not always existing rows.don't tell me I am going to have to add the columns myself. dr.cell.add(cell definition)
How can I toggle the selection of a datagridview row?If I pick the Row once it should "highlight"If I pick the same row again I want it to "unhighlight"this is what I have so far in a mousedown event:
If Selected_RowNM = Selected_RowNM_Temp Then DataGridView1.ClearSelection() End If
"Cannot bind to the property or column rname on the DataSource"
Public Class CustomerUpdFrm Private RowPassed As DataGridViewRow = New DataGridViewRow ' Passed row variable Private Sub CustomerUpdFrm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
DataGridViewRow.IsNewRow property is set for the bottom (empty) row. If I set a cell value in the bottom row using DataGridViewCell.Value, IsNewRow remains set. What is the correct way to programatically set a cell value in the botton row to clear IsNewRow?
The datagridview has columns for all 4 values as well as a 5th (a checkbox column called "colIsSelected"). There is no problem binding the list to the grid and displaying the items. The problem is that the query that gets the selected items in the grid is giving me an implicit cast error when option strict is enabled.
This is the query...
Dim _changes As List(Of BaseChange) _changes = (From _row As DataGridViewRow In dgvChanges.Rows() _ Where Convert.ToBoolean(_row.Cells(NAME_COLUMN_IS_SELECTED).Value) = True _ Select DirectCast(_row.DataBoundItem, BaseChange)).ToList()
...and it produces the correct results with option strict off. The implicit cast squiggle is on the "row As DataGridViewRow" code, and the full message is "Implicit conversion from 'Object' to 'System.Windows.Forms.DataGridViewRow'*".
If I exclude the "As DataGridViewRow" from the query, I get a late binding error on the _row.Cells and _row.DataBoundItem and this also fails option strict.I need this to work with Option Strict enabled, and in VB.
There is something strange going on with my datagridview.
I've a data adapter that fills the underlying data table from a database. Then I assign this datatable as datasource to the datagridview Then I add a row to the datagridview and immediately I need to update the table in my database (as soon as user leaves the newly created row).
At this moment I have more rows (+2, not +1) in my datagridview than in the underlying datatable (the new row doesn't exists yet in it so the data adapter .Update method doesn't write anything to the database).
When DataGridView's .RowLeave event fires the undelying datatable is not yet updated. I've a question - is this behavior normal?
We are binding most of our text boxes and dropdown boxes to a BINDING NAVIGATOR (with a DATA SOURCE of a DATA TABLE).When the BN is clicked through the text boxes all change immediately.We need to use some non-bound controls as well.First one is 4 radio buttons that when clicked will change a single value in a DATA TABLE.What would be the best method to do this? Should I track when the CURRENTCHANGED event occurs on the BINDING NAVIGATOR.I'm thinking that I could trick this by BINDING the SINGLE FIELD to a HIDDEN TEXTBOX and when that textbox CHANGED event occurs mess with the radio buttons and visa-versa.
I've got a piece of code in a project (MyProject) that contains early bound object from a referenced assembly (We'll call it CommonAssembly):
Dim myObject As CommonAssembly.MyEarlyBoundType
now I have another assembly that is dynamically loaded because it is not present in all projects:
Dim myLateBoundObject As Object = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("Utils", "Utils.MyLateBoundType") MyLateBoundType derives from CommonAssembly.MyEarlyBoundType, and I want to cast myObject to myLateBoundObject and then programmatically invoke the additional