VS 2008 Datakey - Adding Row Dynamically To Gridview
Jul 27, 2011
I have a situation where I needed to add a row to my gridview. So say I have rows 3, 4 and 5.
My Datakeys are defined as "ID, CostingID". I did that so I can reference the two ID values I need when saving records.
here is the code in my RowDataBound event.
Basically if it is a datarow, I'm adding the value dataitems so I can get a sub total in the footer row.
Then, I have a boolean field called isDisbursement. So I sort my data by that field. So all records with the disbursement flag as true will display first.
Then as soon as the disbursement flag hits false I add a row to display the Total of the disbursement records value field.
All this works. My problem is, because I added a row at index 4 it inherits the datakey of the row that was at index 4 before. So when I'm looping through the grid rows to save the values I'm having a problem. I've attached an image so you will understand better what I'm trying to achieve. The "Total Disbursements" is the row I added. But it gets the following rows datakey because it is now at index 4.
when I do this, as soon as I reach row 4, although it doesn't have a CostingID it gets the CostingID of row 5 that used to be row 4:
Code:
Dim CostingID As Long = Convert.ToInt64(Me.grvCostings.DataKeys(row.RowIndex).Values("CostingID").ToString)
Dim strValue As String = CType(row.FindControl("txtValue"), TextBox).Text
Code:
If e.Row.RowType = DataControlRowType.DataRow Then
If Not IsDBNull(DataBinder.Eval(e.Row.DataItem, "value")) Then
_SubTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, _
"value"))
End If
I have seen code for adding columns at runtime but here is another scenario for you. I am using a SQLDatasource control for my gridview. And the data returned can have different columns based on the filter meaning one time I may have a column A1, A2, A3 and another time I may have A2, A3, A4. Is there any way I can look at the columns when it is binded at the beginning and add the columns first?
I really need to use the SQLDatasource though because I am connecting to an AS400 and it is using a connection already made in the webconfig and do not know any other way. I do if it was MSSQL server but not this.
I am working on an application, where a user will enter their primary information (Name, Address, Email, Phone etc), then enter their automobile information (usually a fleet of automobiles).
My web page currently has one row of text boxes (Car Make, Year, Model, VIN, Mileage, License Plate)
Below this is a button called "Add More Cars"
What I am trying to do here is allow the user to add more cars if they have more than one that needs to be registered.
My problem is how do I do this dynamically?
2nd problem, how do I collect the data entered by the user (for all cars), to be able to write them to the database?
My C# web app requires the user to enter automobile information. The user can add information for one auto, or more (max 20).
My page has these text fields: Car Number, Car Make, Car Year, Mileage, VIN I have a button that allows the user to "Add More Cars" is to allow the user to add more than one car.
When the user clicks "Add More Cars", how can I dynamically display the text boxes, and keep track of how many cars the user has added (in order to load them to an array and write to database)
I'm having an issue with trying to add a button to my grid. My GridView is first loaded with data in the PageLoad event.
I'm then taking the data in the first cell of each row, and creating a button that will link to a URL. To get the URL, I have to run a query with the data in the first cell as a parameter. I was doing this in the RowDataBound event at first, but hitting that query for every row was making it really slow.
So I decided to add a button that would retrieve the URL only when you clicked the button.
Here's my GridView:
[Code]....
The grid generates fine, the button gets added to the grid for each row. But when I click on it, the RowCommand event doesn't fire, and the page just refreshes.
I've read a few articles on this, but I keep doing something wrong, and I'm not sure what. I took out all of my customization and just want to add a single header row to the very top of my GridView... Can someone show me how I'm screwing up? This is the code I'm trying to use...
[Code]....
I have tried a few different ways of referring to the GridView table... e.row.parent, gv1.controls[0], etc, but nothing seems to work.
I don't get any errors, just nothing ever shows up when the GridView is rendered. I can't find the code using Firebug to look at the HTML either... what am I doing wrong?
(have also tried using "0" for the rowIndex when creating the new GridViewRow)
I follow this code [URL] it works. But the example is show only for 1 row.. come to my case when user want 12 rows for the first time gridview row load. I manage to add it by using for loop. but i stuck at the how to set previous data when user add new row to 13th row. The gridview seems like refresh and the entered data is gone!
I have checked this article link here and its good.. What i want is how can i avoid the button.. mean add the row dynamically without using the button click event.. Instead use text changed event..
I'm adding a row to my gridview like this in the RowDataBound event
Code: If (Not isDisbursementRowAdded) Then Dim row As GridViewRow Dim cell As TableCell row = New GridViewRow(e.Row.RowIndex + 1, e.Row.RowIndex + 1, DataControlRowType.DataRow, DataControlRowState.Normal)
[code]...
I've looked at the tables tr and td elements and they all have opening and closing tags.
I have followed your Nested level gridview and found it working, but i want add a button in the child element(from your example i will have a btn in Product grid and it should get contact_id (parent datakey value as well) ),as i need to update in database.
am binding a gridview to datatable ...and now i want to add a linkbutton/hyperlink as one of the columns in gridview (similar to checkbox field) ...am adding the Lbtn inside a template field ,but i want that column to come as last column ..but its coming as first column,,,how to acheive that??
moreover ,whn i clk on eack linkbutton a pop-up window has to come with submit and save and close buttons and functionality(is it better to use linkbutton or hyperlink??)...am using vs 2005
I have a GridView with an associated DataKey, which is the item ID. How do I retrieve that value inside the RowCommand event?
This seems to work, but I don't like the cast to LinkButton (what if some other command is firing the event?), and I'm not too confident about the NamingContainer bit.
LinkButton lb = (LinkButton)e.CommandSource; GridViewRow gvr = (GridViewRow)lb.NamingContainer; int id = (int)grid.DataKeys[gvr.RowIndex].Value;
I'm aware that I could instead pass that ID as the CommandArgument, but I chose to use DataKey to give me more flexibility.
I'm also aware that it's possible to use a hidden field for the ID, but I consider that a hack that I don't want to use.
What seems to happen is 'GridView1_RowUpdating' gets fired, at this point newEnglish, newFrench, and newGerman all have the new values as they are passed into 'Logic.Update'. Then the update functions updates correctly, but once the 'GridView1_RowUpdating' sub ends, it seems to call Logic.Update another time, and this is where the new values get lost for French and German (datakeys) but not English.
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating Dim newEnglish As String Dim newFrench As String
And bind gridview from this table and ordred by Preference Column I put Linknbutton in gridview that code is:
protected void LinkButton11_Click(object sender, EventArgs e) { GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow; int id = Convert.ToInt32(GridView2.DataKeys[row.RowIndex].Value); using (SqlConnection conn = General.GetConnection()) {
[Code] .....
Oroblem is in this line:
int id = Convert.ToInt32(GridView2.DataKeys[row.RowIndex].Value);
I want when I click on linkbutton it use Id but here it use Preference data How I can define that according to Id column it go to
after my grid view updates a record I would like to run some code, I have tried to use SelectedDataKey.Value.ToString() to get the datakey. However it is null, the record updates so the value must be stored somehow?
I have done this before "n" number of times but I am not able to get it working this time. The trouble is that when the call for the Select Method of the formview goes to the relevant function - "GetCustomerByCusnum" I have a null value in its parameter "cusnum".
I know that I can write a selecting event and using CommandArgument, parse the value of the selected row and pass it into the Select method as a value but I dont want that solution. I know it works without the "Selecting" method but I cant recall how.
For the first page loaded, it shows the correct DataKey value if I click on the command field.
However if I change to the next page of results, upon selecting a record the corresponding value is incorrect. It seems to keep the previous page information. How do I overcome this?
EDIT:
In the GridView1_SelectedIndexChanged method, I used the following:
[Code].....
I am unable to get the correct value after paging.
I'm relatively new to the VS environment. I'm using VS2010 Beta 2 with VB. I have a Gridview setup to pull a list of employees. Next to their name I have edit and delete icons. When I leave the icons as ButtonFields, they pass the DataKey value to my code behind perfectly. When I convert the ButtonFields to TemplateFields, they no longer pass the DataKey.