Forms Data Controls :: How To Use The RowDataBound Declaration On A GridView
Aug 11, 2010
I have info from a couple of different tables that I need to be able to double click on a cell in a gridview and navigate to a couple of separate .aspx pages. Yesterday I learned how to use RowDataBound to get the name from a cell on a gridview to use in a delete confirmation dialoge box, and so am pretty sure I should be using this same RowDataBound, but I cant quite figure out where to start.
For example from the gridview below, I need to be able to double click in the "LoginIssue" field and navigate to an "EditLogin.aspx" page and subsequently be able to double click in the "ContractPath" and be able to navigate to a "ContractPath.aspx" page...or popup.
I have two different functions which are used to generate two different report on one gridview. In otherwords, in my design, I have a calendar event which is used to generate a report on the gridview and I have a dropdownlist which is used to generate a different report on the same gridview, so depending on the control that is clicked on depends on the report being generated. Now I would like a situation where my gridview rowdatabound is only applied to the dropdownlist report not the calendar event report. How can i go about doing so.
I'm attempting to change the format of the 2nd column in a gridview during the rowdatabound event. I pulled sample code from various sources and wrote the following, but it's not working. I tried to do a trace, but the rowdatabound event didn't appear in the trace. Here's some code for the gridview:
[Code]....
Here's what I have in the code behind:
[Code]....
I expected the values in the 2nd template column to get written in italics, but nothing happens. I do have a gridview skin that's getting applied.
The item "Active" is a bit from the database And for the RowDataBound:
Const HeavyCheckMark As Char = ChrW(&H2714) For Each row As GridViewRow In gvProductCodes.Rows If gvProductCodes.EditIndex = -1 Then ' Selects the text from the Label which is inside the GridView control Dim lblActive As String = CType(row.FindControl("lblActive"), Label).Text lblActive = lblActive.Replace("True", HeavyCheckMark) lblActive = lblActive.Replace("False", "") 'Replaces the text in each Label control CType(row.FindControl("lblActive"), Label).Text = lblActive Else Dim chkbx As CheckBox = CType(row.FindControl("chkbxActive"), CheckBox) End If
The check mark works fine when not in edit mode. But when in edit mode, the row that is being edited works as expected. But the other rows now show True or False. I want them to have the const HeavyCheckMark in it instead.
When a Gridview row is in edit, I need to default an empty textbox to today's date. I am close, but the defaulted date is is not saved to the database. I can key in the date and the date is displayed and saved to the database. Even more interesting:
1. The date is defaulted to - 5/17/2010 2. If I erase the month and key the "5" back in the data is not saved. 3. If I erase the month and then change the month to "6", the data is saved to the database. If any value is changed in the date the save works.
I am using the following but want to remove grView, is it possible. this is used in gridview rowdatabound event handler.
If e.Row.RowState = DataControlRowState.Normal Or e.Row.RowState = DataControlRowState.Alternate Then Dim item As GridViewRow = e.Row Dim grView As DbDataRecord = DirectCast(item.DataItem, DbDataRecord) [code]...
I use linq query as below and bind it to listview. I have 2 label control (name,remain).I want to check in code behind if p.count<200 then remain ="Sample text1"if price <300 then "sample text2".I know that I could do it before linq in gridview RowDataBound event
Dim prod= From p In db.products _ Select New With {p.name p.category, p.count} postlist.DataSource = prod postlist.DataBind()
I have an internal web application which uses a custom encryption class to convert strings to varbinary(50) columns in SQL. When I display the table in a GridView, I want to use the RowDataBound event to decrypt the encrypted column back to a string to display.
Currently I have the following in my RowDataBound event:
[Code]....
This throws an exception when I try to load the page: TransformFinalBlock - Length of the data to decrypt is invalid.
I have tried just fetching the data from SQL in my query but the e.Row.Cells(3).Text evaluates to System.Byte[], so I tried using CAST([EncrytedColumn] AS varchar(50)) to convert the varbinary(50) to varchar(50), but this still resulted in the same exception being thrown.
My only solution so far has been to manually fetch the SQL data into a DataTable and decrypt the column before displaying it in the GridView, but I prefer the automated method of binding the SQLDataSource to the GridView.
I have a very simple asp.net page, just some buttons and one GridView on it. The logic is a user click the QUery button,then the button click event was trigured to populate the gridview with data queried from database via LINQ. for a user friendly interface, in RowDataBound event, I visit every row, change a boolean value into checkbox represention. But it seem that the RowDataBound run twice, because the checkboxs were inserted twice for every row in one cell. so why? the source code snippet as follow:
i use a gridview to show data from datasource, but i have some column in this gridview that they're not bound. If i go in edit mode, my unbound control show me the textbox to enter value and its ok, but if i modify value thru rowdatabound, now when i go in edit mode, the textbox are not showing as i expect, its just showing the value i put in rowdatabound, but i don't have the textbox to let me enter a new value and update it after.
And more in the same relation: with the two above condition i wrote, when i dont modify value in rowdatabound, i can modify value in prerender event with this line:
TextBox box1 = this.GridView1.Rows[this.GridView1.EditIndex].FindControl("TextBox1") as TextBox; box1.Text = "a value" ; but
when again i modify value in rowdatabound, the line above will not work too, box1 is load with a null value
Why wasn't my GridView's RowDataBound event fired? I have a masterpage on whick i have a query button, and I have a content page on which i have a customized GridView(named cgvEmployees,derived from GridView). The logic is when user click the button, the button click event triggered that search the underlying database and populate the GridView.
Everything runs great except that RowDataBound event isn't triggered. Because I have to change some cells' representations in RowDataBound event handler. I have surfed so much pages to find the answer but failed. Below is what i have already done:
1. set the autoeventwireup to true; 2. i have a cgvEmployees.bind() sentence in the button click event handler; 3. i have OnRowDataBound="cgvEmployees_OnRowDataBound" in the content page GridView tag attribute
by the way, the database query is coded by Linq Dynamic Query (please google 'dynamic Linq').
void Master_QueryButton_Click(object sender, EventArgs e) { RetiredEmployeeDataContext db = new RetiredEmployeeDataContext(); NameValueCollection nvcQueryKeyValue = getNVCQueryKeyValue(); Expression<Func<RetiredEmployee, bool>> searchPredicate = getLambdaExpr(nvcQueryKeyValue); IQueryable<RetiredEmployee> retireds = db.RetiredEmployees; Expression expr = Expression.Call(typeof(Queryable), "Where", new Type[] { typeof(RetiredEmployee) }, Expression.Constant(retireds), searchPredicate); IQueryable<RetiredEmployee> query = db.RetiredEmployees.AsQueryable().Provider.CreateQuery<RetiredEmployee>(expr); List<RetiredEmployee> employeeList = new List<RetiredEmployee>(query); List<RetiredEmployeeEO> employees = new List<RetiredEmployeeEO>(); foreach (RetiredEmployee employee in employeeList) { RetiredEmployeeEO employeeEO = new RetiredEmployeeEO(); employeeEO.MapEntityToProperties(employee); employees.Add(employeeEO); } cgvEmployees1.ListClassName = typeof(RetiredEmployeeEOList).AssemblyQualifiedName; cgvEmployees1.LoadMethodName = "LoadFromQuery"; cgvEmployees1.LoadMethodParameters.Clear(); cgvEmployees1.LoadMethodParameters.Add(employees); cgvEmployees1.DataBind(); } protected void cgvEmployees1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { //Add the edit link to the action column. HyperLink editLink = new HyperLink(); if (((BasePage)this.Page).ReadOnly) { editLink.Text = "View"; } else { editLink.Text = "Edit"; } editLink.NavigateUrl = "employee.aspx" + EncryptQueryString("id=" + ((RetiredEmployeeEO)e.Row.DataItem).ID.ToString()); if(e.Row.Cells[0].Controls.Count==0) e.Row.Cells[0].Controls.Add(editLink); //Add checkbox to display the isactive field. CheckBox chkActive = new CheckBox(); chkActive.Checked = ((RetiredEmployeeEO)e.Row.DataItem).liveOrDead; chkActive.Enabled = false; if(e.Row.Cells[24].Controls.Count==0) e.Row.Cells[24].Controls.Add(chkActive); if (((RetiredEmployeeEO)e.Row.DataItem).gender.Equals((byte)1)) e.Row.Cells[2].Text = "Male"; else e.Row.Cells[2].Text = "Female"; if (((RetiredEmployeeEO)e.Row.DataItem).retiredOr.Equals((byte)1)) e.Row.Cells[14].Text = "Retired1"; else e.Row.Cells[14].Text = "Retired2"; if (((RetiredEmployeeEO)e.Row.DataItem).birthday.Equals("1753-01-01")) e.Row.Cells[3].Text = ""; if (((RetiredEmployeeEO)e.Row.DataItem).dayToEmployed.Equals("1753-01-01")) e.Row.Cells[6].Text = ""; if (((RetiredEmployeeEO)e.Row.DataItem).dayRetired.Equals("1753-01-01")) e.Row.Cells[7].Text = ""; if (((RetiredEmployeeEO)e.Row.DataItem).dayParty.Equals("1753-01-01")) e.Row.Cells[13].Text = ""; if (((RetiredEmployeeEO)e.Row.DataItem).daytoassign.Equals("1753-01-01")) e.Row.Cells[17].Text = ""; } }
How do I access GridView Page Index in RowDataBound event? I am assigning PageIndex to hyperlink on the gridview, for this I was planning to use "GridView1.PageIndex" in rowdatabound event. Problem is when I got second page in gridview (10 rows per page), the first row in the page shows page index as "0" and from second row it becomes 1. And if I goto third page, the first row in the page shows page index as "1" and from second row it becomes 2.
I have a Gridview with edit and update feature enabled. It displays the data correctly but when I click on the Edit linkbutton(to edit the data), I get the error "Object reference not set to an instance of an object".
I tried debugging and found that the row which I click (say editindex is 1) loses its value. I could identify this while debugging the code, when the code flow moves to the rowdatabound event, the label (or for that matter any control in the rowdatabound event) shows a null value and eventually errors out.
I am unable to figure out as to why the control specified in the rowdatabound event loses its value when editing. Note: The lost valueow data is the one which I tried editing.
I am attaching the code which I have written for the rowdatabound event.
I have one UpdatePanel which contains search criteria controls for a GridView.
The GridView is in another UpdatePanel.
I have a reset button in the search criteria UpdatPanel which resets all the search controls to their default values. However when I click this button for some reason my GridView RowDataBound method fires.
This is slowing the page down when the reset button is clicked. Does anyone know why this is happening and how to stop it. I haven't posted the code and explained it in plain english for ease of reading.
Is there an equivalent of the GridView.RowDataBound event for the DetailView and FormView controls in ASP.NET 3.5?I need to manipulate data after Selecting it from my database, but before it gets presented to the user. I've read the documentation but I think I've missed something because I can only find FormView.DataBound which is called after the entire control has been data bound. Something like an ItemDataBound event would be what I need....?!?
Can I call a javascript function in the RowDatabound event of the Gridview?
I am currently enabling/disabling buttons in each of my gridview rows based on a status value from the database.I need to fire a javascript function (say alert('current status')) when the status is 0,else dont fire that function.Can I achieve this in the row databound event?
I want to have a total in the gridview footer of the duration of the employees. As the rowdatabound goes through the cycles I can see it reading the correct times from each row but it is not totalling in totalTime and I get 0:00:00 in the footer.
I have a page on which everything is loaded dynamically.
There is a Gridview (AutoGenerateColumns=true) and in the RowDataBound I check every column for a boolean datatype. If found I add a checkbox (autopostback=true) to the cell and register the CheckedChanged event. The problem is, that I only get the CheckedChanged event, if I reload the grid in Page_Load: