Archive for the ‘c#’ Category
ASP.NET SlidingMessage Control
The SlidingMessage server control is the ASP.NET version of the excellent jQuery SlidingMessage plugin by Henrik Joreteg. The control is very easy to use with minimal setup – all you have to do is drag and drop the control into your page and voila! you’re ready to go. The binary includes all the necessary javascript inlcuding jquery so you don’t even have to include them separately in your page.
Here’s how you invoke the sliding message, assuming SlidingMessage1 is the ID of the control:
SlidingMessage1.Text = "Congratulations. This works!";
SlidingMessage1.BackColor = System.Drawing.ColorTranslator.FromHtml("#0DFF00");
SlidingMessage1.IncludeJquery = false; //It’s included by default
SlidingMessage1.Show();
And as usual the whole thing is open source so knock yourself out! The source code and a demo is hosted at http://code.google.com/p/slidingmessage/
Happy Programming!
Programmatically extract body of a web page
The technique used in this article can be used to display the contents of an HTML page inside your ASP.NET pages instead of using IFRAMES.
System.Net.WebRequest req = System.Net.WebRequest.Create(Request.QueryString["url"]);
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
System.IO.Stream respStream = resp.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(respStream);
string responseFromServer = sr.ReadToEnd();
System.Text.RegularExpressions.Regex bodyRegex = new System.Text.RegularExpressions.Regex(@"(]*>[\u0000-\uFFFF]+?)");
System.Text.RegularExpressions.Match bodyMatch = bodyRegex.Match(responseFromServer);
Literal1.Text = bodyMatch.Result("$0");
sr.Close();
respStream.Close();
resp.Close();
Thanks to ClayCo at the ASP.NET Forums for his help. Here is the link to the original thread http://forums.asp.net/t/1023144.aspx
Generating Tree-like UI structures
In many of my projects I have had to generate non-binary trees using information from the database and then display them in a “tree-like” structure as shown below.
My algorithm is very simple and it makes use of Dan Vanderboom’s excellent Generic Tree Collection but frankly I’m not satisfied with certain aspects of my algorithm. The main issue – the data can never be retrieved in the same order as shown above from the database.
Now that we have a collection ready, we can generate the tree structure
Finally, I add the items to my drop-down control by calling
GenerateDropDownList(rootCategory, 0);
Let’s have a look at the function
I know I could have used LINQ but many of my projects are running in .NET 2.0 so I had to go old-school! I’m looking forward to your valuable comments as to how YOU would do this and why your solution is more efficient than mine.
Happy Programming!
Resizing Images In ASP.NET
I’m sure there are plenty of similar topics out there but this is my two cents. Lets say you have the following code in your ASP.NET page:
1 Upload a File: <asp:FileUpload ID="pictureUpload" runat="server" /><br />
2 <asp:Button ID="btnUpload" runat="server" Text="Upload" OnCommand="handle_ButtonClick" CommandName="Upload" />
Let’s look at the event handler code that uploads the image to the server and resizes it.
1 protected void handle_ButtonClick(object sender, CommandEventArgs e)
2 {
3 if (e.CommandName == "Upload")
4 {
5 if (pictureUpload.HasFile)
6 {
7 string FilePath = HttpContext.Current.Server.MapPath(PATH_FILESFOLDER) + pictureUpload.FileName;
8 pictureUpload.SaveAs(FilePath);
9 ResizeImageAndSave(FilePath, 90);
10 }
11 }
12 }
13
14 public void ResizeImageAndSave(string FilePath, int Width)
15 {
16 Bitmap loBMP = new Bitmap(FilePath);
17 ImageFormat loFormat = loBMP.RawFormat;
18
19 //*** If the image is smaller than a thumbnail just return it
20 if (loBMP.Width < Width) return;
21
22 decimal lnRatio = Convert.ToDecimal(Width) / loBMP.Width;
23 int lnNewWidth = Width;
24 int lnNewHeight = Convert.ToInt32(loBMP.Height * lnRatio);
25
26 Bitmap bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
27 Graphics g = Graphics.FromImage(bmpOut);
28 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
29 g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
30 g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);
31
32 //Dispose old BMP object
33 loBMP.Dispose();
34
35 bmpOut.Save(FilePath);
36 bmpOut.Dispose();
37 }
The code is pretty obvious – save the file to the specified path, resize the image, dispose the old image and finally save the new image.
Happy Programming!
Using FlexiGrid in your ASP.NET application
I’ve been exploring JQuery for quiet some time now and I’m already a huge fan! Not only is it light-weight but its extensible too – there are plugins for everything, just name it! Well, almost everything
Today I’m going to demonstrate how we can use the excellent FlexiGrid plugin in our ASP.NET applications.
Add the following code to the head section of the document in which you want to display the grid.
2
3 <script src="scripts/jquery.js" type="text/javascript"></script>
4
5 <script src="scripts/jquery.flexigrid.js" type="text/javascript"></script>
6
7 <script type="text/javascript">
8
9 $(document).ready(function(){
10
11 $("#flex1").flexigrid
12 (
13 {
14 url: ‘GetData.aspx’,
15 dataType: ‘xml’,
16 colModel : [
17 {display: 'ISO', name : 'iso', width : 40, sortable : true, align: 'center'},
18 {display: 'Name', name : 'name', width : 180, sortable : true, align: 'left'},
19 {display: 'Printable Name', name : 'printable_name', width : 120, sortable : true, align: 'left'},
20 {display: 'ISO3', name : 'iso3', width : 130, sortable : true, align: 'left'},
21 {display: 'Number Code', name : 'numcode', width : 80, sortable : true, align: 'right'}
22 ],
23
24 /*searchitems : [
25 {display: 'ISO', name : 'iso'},
26 {display: 'Name', name : 'name', isdefault: true}
27 ],*/
28 sortname: "iso",
29 sortorder: "asc",
30 usepager: true,
31 title: ‘Countries’,
32 useRp: true,
33 rp: 15,
34 showTableToggleBtn: true,
35 width: 700,
36 height: 400
37 }
38 );
39 });
40
41 </script>
The grid is going to get its data from an aspx file called "GetData.aspx". In the Page_Load(..) event of this page, generate the XML and send it back to the requesting page.
1 int page = int.Parse( Request.Form[ "page" ].ToString() );
2 int rp = int.Parse( Request.Form[ "rp" ].ToString() );
3 string sortname = Request.Form[ "sortname" ].ToString();
4 string sortorder = Request.Form[ "sortorder" ].ToString();
5
6 string sort = String.Format( "ORDER BY {0} {1}", sortname, sortorder );
7
8 if( page == null )
9 page = 1;
10
11 if( rp == null )
12 rp = 10;
13
14 int start = ( ( page – 1 ) * rp );
15
16 string limit = String.Format( "LIMIT {0}, {1}", start, rp );
17
18 Response.ClearHeaders();
19 Response.AppendHeader( "Expires", "Mon, 26 Jul 1997 05:00:00 GMT" );
20 Response.AppendHeader( "Last-Modified", DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() );
21 Response.AppendHeader( "Cache-Control", "no-cache, must-revalidate" );
22 Response.AppendHeader( "Pragma", "no-cache" );
23 Response.AppendHeader( "Content-type", "text/xml" );
24
25
26 // Generating XML Data
27
28 EnumerableRowCollection<DataRow> data = GetCountryDataTable(sort, limit);
29
30 XDocument xmlDoc = new XDocument(
31 new XDeclaration("1.0", "utf-8", "yes"),
32
33 new XElement("rows",
34 new XElement("page", page.ToString()),
35 new XElement("total", GetTotalRecords().ToString()),
36 data.Select(row => new XElement("row", new XAttribute("id", row["iso"].ToString()),
37 new XElement("cell", row["iso"].ToString()),
38 new XElement("cell", row["name"].ToString()),
39 new XElement("cell", row["printable_name"].ToString()),
40 new XElement("cell", row["iso3"].ToString()),
41 new XElement("cell", row["numcode"].ToString())
42 )
43 )
44 )
45 );
46
47 Response.Write(xmlDoc);
48 Response.End();
Here’s the function that returns the DataRow collection.
1 private EnumerableRowCollection<DataRow> GetCountryDataTable( string sort, string limit )
2 {
3 using( DBM.SqlCommandEx sqlCmd = new DBM.SqlCommandEx( String.Format( "SELECT iso,name,printable_name,iso3,numcode FROM country {0} {1}", sort, limit ) ) )
4 {
5 return sqlCmd.GetDataTable().AsEnumerable();
6 }
7 }
Finally, I used LINQ to create the XML document but you can do it using Strings or any other method you prefer.The download below does not include the MySQL connector for .NET 2.0. You will have to download it and include it in your project and remember to make the necessary changes in the connection string.
Happy Programming!