Twardone45
asked on
Embedding an Image within a user control
Hello Experts,
I found the following code on the website http://www.codeproject.com. The author Manny Salazar designed this code to be a user control that provides a custom pager for the GridView control.
This code is compiled into a DLL and placed in the bin folder for the website.
I want to modify the code to use images in place of the"First", "Next", "Previous", and "Last" LinksButtons.
I have four .gif(s) that I want to use in the following part of the code:
I am assuming that's where I would substitute the images for the text. If anyone could help me figure this out that would be great.
I want to embed the images in the dll so that the user doesn't have to worry about where the images are.
As a further enhancement I wanted to embed a css file. Is that possible and if so how?
Thanks.
I found the following code on the website http://www.codeproject.com. The author Manny Salazar designed this code to be a user control that provides a custom pager for the GridView control.
This code is compiled into a DLL and placed in the bin folder for the website.
I want to modify the code to use images in place of the"First", "Next", "Previous", and "Last" LinksButtons.
protected override void InitializePager
(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
if (PagerType == ThisPagerType.Regular)
{
// if PagerType is not DropDownList
// render the regular GridView Pager
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
TableCell cell_1;
// if we are going to use dropdownlist
if (PagerType == ThisPagerType.DropDownList)
{
// our Pager with DropDownList control
// create our DropDownList control
DropDownList ddl = new DropDownList();
// populate it with the number of Pages of our GridView
for (int i = 0; i < PageCount; i++)
{
ddl.Items.Add(new ListItem(Convert.ToString(i + 1), i.ToString()));
}
ddl.AutoPostBack = true;
// assign an Event Handler when its Selected Index Changed
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
// synchronize its selected index to GridView's current PageIndex
ddl.SelectedIndex = PageIndex;
// add our first TableCell which will contain the DropDownList
cell_1 = new TableCell();
// we just add a Label with 'Page ' Text
cell_1.Controls.Add(PageOf());
// our DropDownList control here.
cell_1.Controls.Add(ddl);
// and our Total number of Pages
cell_1.Controls.Add(PageTotal());
}
else
{
// if we are going to use the FirstPrevNextLast buttons.
LinkButton first = new LinkButton();
first.Text = "First ";
// first button will always have a value of zero (0)
first.CommandArgument = "0";
first.Enabled = PageIndex > 0;
// add click event handler
first.Click += new EventHandler(navigate_Click);
LinkButton prev = new LinkButton();
prev.Text = "Prev ";
// set Prev button arguments to current PageIndex minus 1
prev.CommandArgument = string.Format("{0}", (PageIndex - 1));
prev.Enabled = (PageIndex > 0);
prev.Click += new EventHandler(navigate_Click);
LinkButton next = new LinkButton();
next.Text = "Next ";
// set Next button arguments to current PageIndex plus 1
next.CommandArgument = string.Format("{0}", (PageIndex + 1));
next.Enabled = (PageIndex < (PageCount - 1));
next.Click += new EventHandler(navigate_Click);
LinkButton last = new LinkButton();
last.Text = "Last";
// Last button will always have a value equal to PageCount minus 1
last.CommandArgument = string.Format("{0}", (PageCount - 1));
last.Enabled = (PageIndex < (PageCount - 1));
last.Click += new EventHandler(navigate_Click);
cell_1 = new TableCell();
// add the First button to cell controls collection
cell_1.Controls.Add(first);
// add the Prev button
cell_1.Controls.Add(prev);
// add the Next button
cell_1.Controls.Add(next);
// add the Last button
cell_1.Controls.Add(last);
}
// create a Table that will replace entirely our GridView's Pager section
Table tbl = new Table();
tbl.BorderWidth = 0;
tbl.Width = Unit.Percentage(100);
// add one TableRow to our Table
tbl.Rows.Add(new TableRow());
// the 2nd TableCell will display the Record number you are currently in.
TableCell cell_2 = new TableCell();
cell_2.Controls.Add(PageInfo(pagedDataSource.DataSourceCount));
// add now the 2 cells to our created row
tbl.Rows[0].Cells.Add(cell_1);
tbl.Rows[0].Cells.Add(cell_2);
tbl.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Left;
tbl.Rows[0].Cells[1].HorizontalAlign = HorizontalAlign.Right;
// in Pager's Row of our GridView add a TableCell
row.Controls.AddAt(0, new TableCell());
// sets it span to GridView's number of columns
row.Cells[0].ColumnSpan = Columns.Count;
// finally add our created Table
row.Cells[0].Controls.AddAt(0, tbl);
}
}
protected virtual void navigate_Click(object sender, EventArgs e)
{
OnPageIndexChanging(new GridViewPageEventArgs
(int.Parse(((LinkButton)sender).CommandArgument)));
}
protected virtual void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
// on our DropDownList SelectedIndexChanged event
// call the GridView's OnPageIndexChanging method
// to raise the PageIndexChanging event.
// pass the DropDownList SelectedIndex as its argument.
OnPageIndexChanging(new GridViewPageEventArgs
(((DropDownList)sender).SelectedIndex));
}
private Label PageOf()
{
// it is just a label
Label lbl = new Label();
lbl.Text = "Page ";
return lbl;
}
private Label PageTotal()
{
// a label of GridView's Page Count
Label lbl = new Label();
lbl.Text = string.Format(" of {0}", PageCount);
return lbl;
}
private Label PageInfo(int rowCount)
{
// create a label that will display the current Record you're in
Label label = new Label();
int currentPageFirstRow = ((PageIndex * PageSize) + 1);
int currentPageLastRow = 0;
int lastPageRemainder = rowCount % PageSize;
currentPageLastRow = (PageCount == PageIndex + 1) ?
(currentPageFirstRow + lastPageRemainder - 1) :
(currentPageFirstRow + PageSize - 1);
label.Text = String.Format("Record {0} to {1} of {2}",
currentPageFirstRow, currentPageLastRow, rowCount);
return label;
}
[Category("Paging")]
[DefaultValue("1")]
public ThisPagerType PagerType
{
get
{
return (ViewState["PagerType"] != null ?
(ThisPagerType)ViewState["PagerType"] : ThisPagerType.DropDownList);
}
set
{
ViewState["PagerType"] = value;
}
}
public enum ThisPagerType
{
Regular = 0,
DropDownList = 1,
LinkButton = 2
}
if (PagerType != ThisPagerType.DropDownList)
{
// if PagerType is not DropDownList
// render the regular GridView Pager
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
if (PagerType == ThisPagerType.DropDownList)
{
// our Pager with DropDownList control
}
else
{
// our Pager with LinkButton controls
}
}
I have four .gif(s) that I want to use in the following part of the code:
else
{
// if we are going to use the FirstPrevNextLast buttons.
LinkButton first = new LinkButton();
first.Text = "First ";
// first button will always have a value of zero (0)
first.CommandArgument = "0";
first.Enabled = PageIndex > 0;
// add click event handler
first.Click += new EventHandler(navigate_Click);
LinkButton prev = new LinkButton();
prev.Text = "Prev ";
// set Prev button arguments to current PageIndex minus 1
prev.CommandArgument = string.Format("{0}", (PageIndex - 1));
prev.Enabled = (PageIndex > 0);
prev.Click += new EventHandler(navigate_Click);
LinkButton next = new LinkButton();
next.Text = "Next ";
// set Next button arguments to current PageIndex plus 1
next.CommandArgument = string.Format("{0}", (PageIndex + 1));
next.Enabled = (PageIndex < (PageCount - 1));
next.Click += new EventHandler(navigate_Click);
LinkButton last = new LinkButton();
last.Text = "Last";
// Last button will always have a value equal to PageCount minus 1
last.CommandArgument = string.Format("{0}", (PageCount - 1));
last.Enabled = (PageIndex < (PageCount - 1));
last.Click += new EventHandler(navigate_Click);
cell_1 = new TableCell();
// add the First button to cell controls collection
cell_1.Controls.Add(first);
// add the Prev button
cell_1.Controls.Add(prev);
// add the Next button
cell_1.Controls.Add(next);
// add the Last button
cell_1.Controls.Add(last);
}
I am assuming that's where I would substitute the images for the text. If anyone could help me figure this out that would be great.
I want to embed the images in the dll so that the user doesn't have to worry about where the images are.
As a further enhancement I wanted to embed a css file. Is that possible and if so how?
Thanks.
first of all, you're missing a quote mark at the end of the string, but I assume that's just a typo :)
re. images - why not to add them to the resources in VS and then simply refer from the code? that's exactly what you wanted as far as I understand it
re. images - why not to add them to the resources in VS and then simply refer from the code? that's exactly what you wanted as far as I understand it
ASKER
Thank you. I did add them as a "Resource" but I still couldn't get the images to load. I am using an ImageButton and it asks for an ImageUrl but well...I'm not hitting the "mark".
Can you give me some sample code that will do what I am trying to do?
Thanks.
P.S.
I've been on the Internet for 2 days researching this and I'm a little frustrated. I know the answer is out ther but I'm not sure where.
Can you give me some sample code that will do what I am trying to do?
Thanks.
P.S.
I've been on the Internet for 2 days researching this and I'm a little frustrated. I know the answer is out ther but I'm not sure where.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Open in new window
The page loaded without errors but the image was not visible. I am assuming that the reference is wrong for the line:
Open in new window
Again, any help is appreciated.