DataKeyNames In Databound Controls Must Be A Property?
Aug 24, 2010
I use a ListView along with an ObjectDataSource tied to a business object. This object is defined as follows:
public class Employee
{
public int Id;
public string Name;
}
When I try setting the DataKeyNames property of the ListView to Id, ASP.net blows up and says: DataBinding: 'Employee' does not contain a property with the name 'Id'. However, when I change the object to that:
public class Employee
{
public int Id {get; set;}
public string Name;
}
It works!!!I couldn't find any documentation about this behavior. Why is it not accepting a simple variable for DataKeyNames and instead it insists on a property?
View 1 Replies
Similar Messages:
Jan 8, 2011
How would I go about displaying a databound dropdown list in a property grid, i.e. a dynamic list that can be used to set the value of an individual property?
View 1 Replies
Jul 22, 2010
I wanted to get the total row count in a GridView's databound event handler, so I tried the following:
protected void grid_DataBound(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
DataSet data = grid.DataSource as DataSet;
if (data == null)
return;
int totalRows = data.Tables[0].Rows.Count;
}
The problem is that the grid.DataSource property is null. The DataSourceID property is not null, so does that mean that I can't access the DataSource object in the DataBound event handler unless I assign the DataSource property directly?
Edit1: Here is the code in my GridHelper class for adding rowcount to the BottomPagerRow. I would like to get rid of the requirement to pass in the ObjectDataSource, but can't because I need to use the Selected event to get total row count. Hence the reason for the question. I also think this might be better in a custom control where I can access ViewState, and/or create child controls during the Init event (I still have a problem to resolve with the way the pager renders with an extra cell), but then I'd still have the problem of how to get to the total row count when the DataSource itself doesn't appear to be available in any GridView events.
Edit 2: Not really relevant to the specific problem, but I resolved the problem I was having with the pager rendering so i've updated the code posted. I found the trick here: [URL]
#region Fields
private int totalRows = -1;
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="GridHelper"/> class.
/// Adds EventHandlers to the GridView to display results from the ObjectDataSource in the footer.
/// Marked as obsolete because AddResultsToFooter method provides a static access to the same functionality
/// An instance of GridHelper is required by the passed in GridView to store the totalRows value between the two event handlers
/// </summary>
/// <param name="grid">The grid.</param>
/// <param name="source">The ObjectDataSource linked to the GridView.</param>
[Obsolete("Use AddResultsToFooter instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public GridHelper(GridView grid, ObjectDataSource source)
{
source.Selected += source_Selected;
grid.PreRender += grid_PreRender;
}
#endregion
#region Event Handlers
private void grid_PreRender(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
if (grid.HeaderRow != null)
grid.HeaderRow.TableSection = TableRowSection.TableHeader;
//Add a cell to the bottom pager row to display the total results
if (grid.BottomPagerRow == null || !grid.BottomPagerRow.Visible)
return;
//Get the control used to render the pager
//http://michaelmerrell.com/2010/01/dynamically-modifying-the-asp-net-gridview-paging-control/
Table tblPager = grid.BottomPagerRow.Cells[0].Controls[0] as Table;
if (tblPager == null)
return;
if (totalRows < 0)
{
//The DataSource has not been refreshed so get totalRows from round trip to client
addResultsToPagerTable(tblPager, grid.Attributes["results"]);
return;
}
int firstRow = grid.PageIndex * grid.PageSize + 1;
int lastRow = firstRow + grid.Rows.Count - 1;
string results;
if (totalRows <= grid.PageSize)
results = string.Format("<span class='grid-pager'>{0} Results</span>", totalRows);
else
results = string.Format("Results <b>{0}</b> to <b>{1}</b> of <b>{2}</b>", firstRow, lastRow, totalRows);
addResultsToPagerTable(tblPager, results);
//Need to store the information somewhere that is persisted via ViewState, and we don't have access to ViewState here
grid.Attributes.Add("results", results);
}
/// <summary>
/// Handles the Selected event of the source control. Gets the total rows, since it is not possible to access them from the GridView.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs"/> instance containing the event data.</param>
private void source_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.ReturnValue is DataView)
totalRows = ((DataView)e.ReturnValue).Count;
else if (e.ReturnValue is EntitySet)
totalRows = ((EntitySet)e.ReturnValue).Count;
}
#endregion
#region Private Methods
private static void addResultsToPagerTable(Table tblPager, string results)
{
//http://michaelmerrell.com/2010/01/dynamically-modifying-the-asp-net-gridview-paging-control/
//Get a handle to the original pager row
TableRow pagesTableRow = tblPager.Rows[0];
//Add enough cells to make the pager row bigger than the label we're adding
while (pagesTableRow.Cells.Count < 10)
pagesTableRow.Cells.Add(new TableCell { BorderStyle = BorderStyle.None });
//Add a new cell in a new row to the table
TableRow newTableRow = new TableRow();
newTableRow.Cells.AddAt(0, new TableCell
{
Text = results,
BorderStyle = BorderStyle.None,
ColumnSpan = pagesTableRow.Cells.Count
});
tblPager.Rows.AddAt(0, newTableRow);
}
#endregion
#region Public Methods
/// <summary>
/// Adds EventHandlers to the GridView to display results from the ObjectDataSource in the footer.
/// </summary>
/// <param name="grid">The GridView.</param>
/// <param name="source">The ObjectDataSource linked to the GridView.</param>
public static void AddResultsToFooter(GridView grid, ObjectDataSource source)
{
if (grid == null)
throw new ArgumentNullException("grid", "grid is null.");
if (source == null)
throw new ArgumentNullException("source", "source is null.");
new GridHelper(grid, source);
}
#endregion
View 1 Replies
Dec 7, 2010
I want to render something like this (with ASP.Net Controls in the codebehind):
<ul>
<li class="first"><h1>This is a caption</h1></li>
<li><a href="#" title="" target="_self">Foo</a></li>
<li><a href="#" title="" target="_self">Foo1</a></li>
<li><a href="#" title="" target="_self">Foo2</a></li>
<li><a href="#" title="" target="_self">Foo3</a></li>
<li><a href="#" title="" target="_self">Foo4</a></li>
</ul>
<ul>
<li class="first"><h1>This is a another caption</h1></li>
<li><a href="#" title="" target="_self">Foo5</a></li>
<li><a href="#" title="" target="_self">Foo6</a></li>
<li><a href="#" title="" target="_self">Foo7</a></li>
<li><a href="#" title="" target="_self">Foo8</a></li>
<li><a href="#" title="" target="_self">Foo9</a></li>
<li><a href="#" title="" target="_self">Foo10</a></li>
<li><a href="#" title="" target="_self">Foo11</a></li>
</ul>
The amount of li elements that will be rendered into each ul is determined at runtime. Each link in a li belongs to into a specific ul (the one containing a specific caption. Imagine this as a kind of a treeview with nodes and subnodes) During the bind Event I need access to an ASP:HyperLink that will be rendered into the a-element. Which databound ASP.Net control should I pick for this? Looks like a repeater in a repeater, which should make the databinding process ugly. I'm thinking about creating this HTML-Output with StringWriters myself.
View 1 Replies
Apr 18, 2010
I have a GridView with edit/update functionality. While updating, I need to get some hidden values saved in DataKeyNames. How to get the values of DataKeyNames via RowCommand? I have tried the following code via RowUpdating and RowCommand, but it gives an error in e.CommandArgument.
[Code]....
View 10 Replies
Aug 8, 2010
I have two listviews. What i want to do is that when the nested listview emptydatatemplate shows i want to put a hyperlink with a querystring in it, the id in the querystring should be the fk in the nested listview. Is it possible to bind the hyperlink with the id in codebehind? I use two object datasources. Does it matter where i put the nested listview now i have it in the parents itemtemplate. Also it seems to be a problem to set the datakeynames in the nested listview, what could be the reaso for that.
[Code]....
View 3 Replies
Jan 11, 2010
From what I understand within the Gridview Object you can have many datakeynames.
I have the field like this DataKeyNames = "id1, id2"
However, i don't know how to access the DataKeyNames individualy. For example. How do you access the first ID for the for a given row or the 2nd ID for a given row????
View 1 Replies
Mar 17, 2010
I have these line of code:
[Code]....
When i debug i get an error that says: 'System.Data.DataRowView' does not contain a property with the name 'job_id'and sometimes 'System.Data.DataRowView' does not contain a property with the name 'pub_id'I need to get the appropriate value for the selected row. GridView only output Jobs results or Publishers results, the problem is when the user clicks select button beside the record, i get the error i mentioned above.
View 3 Replies
May 7, 2015
HTML:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="G_Name, Param_ID" AutoGenerateColumns="False" Width="100%" PageSize="8" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging">
<Columns>
[code]...
Since I am using 2 DataKeyName is Gridview, so I have to pass both the DataKey while deleting Row from Gridview(using "Image Button" of Gridview).I tried it using below lines:
string name = GridView1.DataKeys[gvrow.RowIndex].Value["G_Name"].ToString();
string id = GridView1.DataKeys[gvrow.RowIndex].Value["Param_ID"].ToString();
View 1 Replies
Mar 30, 2011
I have specified DatakeyNames for a GridView control in my aspx page.I need to retrieve the Datakeys in javascript.How can this be achieved?
View 4 Replies
Nov 19, 2010
i'm getting error on finding control from grid's row.control is an imagebutton which is placed inside a template field.my requirement is if add to cart button is clicked and if that particular book has its volums then it should show message that you need to see its detail and then after selecting its volume you can add it to cart...but i'm trapped in where i'hv to attach bookcod with querystring which is in datakey names of grid. The datagrid has one column only and thats template field..
[Code]....
View 6 Replies
Jun 24, 2010
I have two columns in my Gridview marked false for the visible property but which are clearly listed in the DataKeyNames that are still getting set to null in my database table on update.
The first one is a column MId# which is a type int. It starts as 0 but on edit is turned into null. The Second is RequireSKU which is also converted to null.
View 4 Replies
Feb 21, 2011
When the page is displayed have labels, textboxs, and dropdownlists on top part of the page then the gridview at the bottom with the page numbers at the bottom of the gridview. Create the columns and add data to the gridview programmatically with several hidden columns. Use DataKeyNames on the source page and use DataKeys in VB.Net code behind to get data from the hidden column cells of the selected row. On the
first page when a row is selected, the textboxes and dropdownlists have thecorrect information from the gridview hidden columns. When select another page from pages numbers at the bottom of the gridview and select a row from the new page, get theinformation from the hidden column from the first page andcorrect data from the columns that are displayed onnewly selected page.
View 1 Replies
Jul 10, 2010
how can I specify DataKeyNames for a GridView when using a dictionary as DataSource?
[Code]....
In this example I would like to use "cat", "dog", "llama" and "iguana" as DataKeys for the four rows.
View 2 Replies
Mar 11, 2010
I have a gridView, with two DataKeyNames: MemberID, and CommitCustomerID.
One DataList has this sql statement:
SELECT * FROM [tblMemberProfile] WHERE MemberID = @MemberID
It pops up perfectly fine.
I also have another DataList with this statement:
SELECT * FROM [Incidents] WHERE CustomerID = @CommitCustomerID
I know this sql command works I have tested it with my data.
However I dont think the DataList is getting the proper value for the selected row in this DataLists case.
How can I make sure when I select the row in the GridView the proper parameters are going to the proper DataList sql statements?
View 1 Replies
May 7, 2015
I am did Gridview delete and rebind data using json and jquery like this
<script type="text/javascript">
$(document).ready(function () {
$(".deleteGridRecord").click(function () {
//Get the Id of the record to delete
var record_id = $(this).attr("id");
[Code] ....
But i want to set DataKeyNames properties of grid view in above code dynamically how can do this....
View 1 Replies
May 7, 2015
How to get grid view datakey value in nested grid view in gridview_RowCommand
I have used this code but here it will not detecting grid view name
protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e) {
string tempid = "";
switch (e.CommandName) {
case "cmdbtn":
int currentRowIndex = Convert.ToInt32(e.CommandArgument);
[Code] ....
I have used this code but here it will not detecting grid view name...
View 1 Replies
May 10, 2010
i have a FormView, and i already have a Label control that gets the value of theselected propery inside the FormView, so each time the FormView displays data, i have a Label control that displays individual values, according to the value of the FormView, here is the code:
[code]....
What i would like to do is to know how i could add a DataList instead of a Label, and then each time the FormView databinds an item, to show the value of the DataList How would i go about doing that?
View 10 Replies
Sep 15, 2010
So what I'm trying to accomplish is this
[Code]....
The user control has public properties named accordingly and the page has protected properties accordingly which I've verified have the desired values.
For some reason the values are always empty strings or 0s in the usercontrol, no matter what the page property is.
View 1 Replies
Apr 17, 2010
I need to change my DataKeyName for a Formview in Code, but I get the error
cant convert string to [string]
How do I change the DataKeyNames programatically? It has just on DataKeyname, not an array.
View 3 Replies
Apr 10, 2010
I have a nested master page with a detailsview in one of the <asp:contents>.
Now within the <asp:contents>. above I have 2 contentplaceholders.
[Code]....
Then on my contentplaceholder "NestMainBody" I have another detailsview control with a standard button which is outside the detialsview.
What I want to do is click on this button and be redirected to another page which has content in the
NestMainBodyRight but not loose the specific ID's that are on the other Gridviews.
View 6 Replies
Apr 3, 2010
I wondered what the difference between
'dbo.Property' and 'Property'
would be in an sql query
View 2 Replies
Mar 10, 2010
I have to set GridView.DataKeyNames(This is really a question about the syntax for a string array, in VB.Net.)
I am discovering the PrimaryKey columns names from within a loop, ie:
For Each fld As IEntityField In Me.llbDataSource.EntityCollection(0).PrimaryKeyFields 'fld.Name ' this is where the column name is stored, so I have to get this into an array Next I can not use this syntax.
GridView.DataKeyNames = new string() { "PowRatHP", "Voltage", "Phases", "Poles", "Drive" }
So, basically, how does one declare a string array (as required by GridView.DataKeyNames), and then populate the elements of the array from within a loop?
View 3 Replies
Feb 15, 2010
I have a generic List which is populated with an object which has properties like FirstName, Surname etc.
If I bind a gridview to the list with autocompletecolumns = true, the Gridview displays the data in the List.
The code looks like:
[code]....
My question is:
How do I populate the DataKeyNames with the properties (FirstName, Surname) contained in the object that is contained in each element of the Generic List?
View 4 Replies
Oct 18, 2010
I have defined the following in my gridview markup (simplified):
<asp:GridView ID="grvReport" runat="server" DataSourceID="odsReport"
AutoGenerateColumns="False" DataKeyNames="EntryDate,EmployeeNumber">
Then I define my datasource's update parameters as such:
<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="IsJustified" Type="Boolean" />
[code]...
View 2 Replies