|
I have a Gridview application that displays up to 80+ columns showing the various roles a user can have. The first few columns identify the user by name, dept, and job title followed by the various roles each can have, A "Yes" or "No" in a column indicates whether the user has that role. As can be expected, horizontal scrolling means that at some point the columns identifying the user are no longer seen and one gets a grid of Yes and Nos.
BTW, the reason this format is desired is so managers and supervisors can compare users and the roles assigned. As a result, sorting by the columns is important.
I looked into freezing the left most columns but can't find a solution that will work and still allow sorting by any column.
So, I would like to provide a pop-up that displays the user's identity information when one hovers over a row.
I have many possibilites but they use Ajax or have a button in a column to click.
Is this possible? I reviewed lots of articles on this website plus other websites and have not found what I am looking for. I have tried a few things but they do not do what I would like them to do. So, I thought I would ask.
Thanx in advance.
|
|
|
|
|
Of course there are many ways to handle this but essentially you need to add the behavior to the gridcell, either by adding an attribute during rendering, or by JQuery on the client side. Where the info comes from to display is the next point. Again, either construct it and attach it to the grid when being rendered, or perhaps a hidden cell. The popup window is simply a div that is floated on top in the desired location.
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
|
Sorry but your link doesn't go to any article
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
|
JTRizos wrote: My question is should the code used for a Datagrid work for a Gridview? I have editted my application code with code from this article and get no errors but do not know if this article also applies to a Gridview.
Because all manipulation done through JavaScript so it doesn't matter Gridview or Datagrid. It will work for any control but you have to pass required parameter for javascript function.
Thanks
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
Thanx to the feedback I've recieved from this forum, I think I am almost there. Viewing the source I can see that the onmouseover and onmouseout controls have been added to each row in the Gridview as intended. However, I get a "Microsoft JScript runtime error: Object expected" error. I cannot figure out why. The code is as follows:
.aspx code
<script type="javascript">
function ShowTooltip(LName,FName,JUDesc,JTDesc)
{
document.getElementById("td0").innerText=LName;
document.getElementById("td1").innerText=FName;
document.getElementById("td2").innerText=JUDesc;
document.getElementById("td3").innerText=JTDesc;
x=event.clientX + document.body.scrollLeft;
y=event.clientY + document.body.scrollTop + 10;
Popup.style.display="block";
Popup.style.left=x;
Popup.style.top=y;
}
function HideToolTip()
{
Popup.style.display="none";
}
</script>
<div id="Popup" class ="transparent">
<div style="BACKGROUND-COLOR:#003366"><center><b>Employee Info</b></center></div>
<div>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td id="td0" align="left"></td>
</tr>
<tr>
<td id="td1" align="left"></td>
</tr>
<tr>
<td id="td2" align="left"></td>
</tr>
<tr>
<td id="td3" align="left"></td>
</tr>
</table>
</div>
</div>
.aspx.cs code
private void InitializeComponent()
{
this.gvRoles.RowDataBound += new GridViewRowEventHandler(this.gvRoles_RowDataBound);
}
public void gvRoles_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItem != null)
{
e.Row.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Row.DataItem, "EmployeeNameLast").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "EmployeeNameFirst").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "JobUnitDescription").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "JobTitleDescription").ToString() + "');");
e.Row.Attributes.Add("onmouseout", "HideToolTip();");
}
else
{
lblError.Text = "Nothing to report ";
}
}
Any advise will be much appreciated. Thanx again for the feedback.
|
|
|
|
|
It's better to debug the javascript put the alert inside the method, because i am suspecting for following line. so see the value of :
alert(event.clientX);
alert(document.body.scrollLeft);
alert(event.clientY);
alert(document.body.scrollTop);
I believe may error comes from this line because it's varying browser to browser. So test it and let me here.
Thanks
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
Thanx Parwej,
I tried this and the alerts do not pop up. Something does flash on the screen so I am guessing it might be the alerts. The JScript message pops up when I hover over a row and in the source the correct onmouseover and onmouseout are highlighted for the correct row. So I think I am close.
I should explain I am testing this using the Debug in Visual Studio 2008.
I'll keep trying to get this to work.
Thanx for your prompt reply.
|
|
|
|
|
Hi, alert should popup so write those alerts before the all statement. I believe issue is with those statement. For testing purpose show the tool tip without setting the x, and y. See what's happened. Please test it on different browser.
If you can share your screen on TeamViewer then I can help you and see what's going on.
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
I took out everything from the JScript except the document.getElementByID statements and still get the JScript runtime error when I hover over a row. The error occurs on ShowToolTip and HideToolTip.
I did notice that I get the "Nothing to report " message from the .aspx.cs code if statement. Not sure why.
I am using IE 8 which is standard for the department and am not sure how to test this without VS 2008 or without placing it in the live environment. I've never used TeamViewer and I doubt it would work due to the firewalls used here. The app I am working on will be internal to our department. Sorry I cannot be more helpful.
|
|
|
|
|
Ok, Do step by step :
First comment your existing code then test with simple alert and let me know the status that you are getting alert or not:
public void gvRoles_RowDataBound(object sender, GridViewRowEventArgs e)
{
if ( e.Row.RowType == DataControlRowType.DataRow )
{
e.Row.Attributes.Add("onmouseover", "alert('Display some message');");
}
}
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
It works. I get the alert message each time I hover over a row.
|
|
|
|
|
Good Start Now change your code and test with your method:
function ShowTooltip(message)
{
alert(message);
}
e.Row.Attributes.Add("onmouseover", "ShowTooltip('Passed Test Message');");
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
Tried this and got the "JScript runtime error:Object expected" message on each row hovered.
|
|
|
|
|
|
Agreed but I don't have a messenger here.
I changed the and the ShowTooltip(message) worked. No runtime error.
However, when I put the code back to the way it was I don't get the runtime error but I do get a webpage message with a number in it. When I press the OK button, it goes through a series of three messages having different numbers as I press OK after each one. Hovering over a row starts the series of messages over again.
Any idea? I know this is abstract and you probably have better things to do but you have been a big help.
|
|
|
|
|
I'll try this again
I changed the "" to "<script type="text/javascript">" and I do not get the runtime error anymore for the ShowTooltip(message).
So, I changed it back to the original code and no longer get the runtime error. However, I get a webpage message window with a number in it. Pressing OK brings up another webpage message with another number in it. This happens about 3 times. Hovering over a row restarts this series of messages with a different number in each.
Any ideas? I know this is abstract but you have been a big help on this.
I do not have a messenger here and I know this is cumbersome.
|
|
|
|
|
Can you send me print screen of that error message so I can take a look?
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
Your last message is broken so send me direct email with your last message on my person id:
ahamad.parwej@gmail.com
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
With help from this forum (Thanx Parwej Ahamad) I got what I needed. I am including the code here in case it can help others. The application has 119 columns and this Popup displays the employee name, job unit and job description by hovering over any row as the user scrolls horizontally.
This was based on A Simple DataGrid Row Tooltip For Beginners.[^]
.aspx
<!-- Script and Div to set up the Popup with Employee Info -->
<script type="text/javascript">
function ShowTooltip(LName,FName,JUDesc,JTDesc)
{
document.getElementById("td0").innerText=LName;
document.getElementById("td1").innerText=FName;
document.getElementById("td2").innerText=JUDesc;
document.getElementById("td3").innerText=JTDesc;
x=event.clientX + document.documentElement.scrollLeft;
y=event.clientY + document.documentElement.scrollTop + 5;
Popup.style.display="block";
Popup.style.left=x;
Popup.style.top=y;
}
function HideToolTip()
{
Popup.style.display="none";
}
</script>
<div id="Popup" class ="transparent">
<div style="BACKGROUND-COLOR:#003366"><center><b>Employee Info</b></center></div>
<div>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td id="td0" align="left"></td>
</tr>
<tr>
<td id="td1" align="left"></td>
</tr>
<tr>
<td id="td2" align="left"></td>
</tr>
<tr>
<td id="td3" align="left"></td>
</tr>
</table>
</div>
</div>
.aspx.cs
public void gvRoles_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItem != null)
{
e.Row.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Row.DataItem, "EmployeeNameLast").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "EmployeeNameFirst").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "JobUnitDescription").ToString() + "','" +
DataBinder.Eval(e.Row.DataItem, "JobTitleDescription").ToString() + "');");
e.Row.Attributes.Add("onmouseout", "HideToolTip();");
}
}
style.css
.transparent { BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; DISPLAY: none; FILTER: alpha(opacity=80); BORDER-LEFT: black 1px solid; WIDTH: 180px; COLOR: white; BORDER-BOTTOM: black 1px solid; POSITION: absolute; HEIGHT: 90px; BACKGROUND-COLOR: blue }
|
|
|
|
|
Thanks, You will be always resolved your issue with this forum.
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
Hi.
I have a problem with selecting a control from codebehind.
This is my scenario:
1. i get a string from a webservice (session): string boxstring = "<input type="text" id="MainContent_TextBoxStopRoadName01" name="ctl00$MainContent$TextBoxStopRoadName01">";
2. i insert this string to a <div id="boxcontainer"> from codebehind like this: boxcontainer.InnerHtml=boxstring;
3. Page loads
4. User types text in the box, and clicks a button to submit it
5. How do i find this textfield from codebehind from its id? I would like to get the field as an TextBox control, but the text value is the most important.
I´ve tried several things, like Findcontrol("id") and Findcontrol("id").Findcontrol("id") and so on. But it doesnt work.
Another thing does work though, if instead of a string, I create the textfield as an TextBox control, and then insert it: BoxContainer.Controls.Add(TextBox); - then it works! But it is not a possible solution in my situation. I only have the textbox (among many other elements) in a string.
Really hope you can help!
Thanks
|
|
|
|
|
|
A page on the server is a transient object recreated whenever the browser requests the page. That's true for postbacks and callbacks too
|
|
|
|