tag:blogger.com,1999:blog-17016035411056743692024-03-28T15:54:09.970+11:00.Net friendlySaeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.comBlogger55125tag:blogger.com,1999:blog-1701603541105674369.post-71597553800037104632014-09-29T19:00:00.000+10:002014-09-30T02:40:03.623+10:00Entity circular reference issue in wcfWCF Services uses DataContractSerializer by default. when WCF tries to serialize the entities that have relationships with other entities, it embeds them inside each other multiple times by default. When we use Entity Framework and poco entities that have bi-directional relationships, if we need to return those entities from WCF methods, we get exception and circular references cause the serialization to fail. we need to tell DataContractSerializer to preserve the object references and act smarter and link objects together rather than copying multiple times.<br />
There is a parameter in DataContractSerializer constructor that can be set to true to preserve the object references.<br />
<br />
I found two ways to fix that issue:<br />
<br />
1- using [DataContract(IsReference = true)] attribute on the entity<br />
<br />
<pre class="brush: csharp">[DataContract(IsReference = true)]
public class Customer
{
[DataMember]
public string Name { get; set; }
[DataMember]
public Order Order { get; set; }
}
</pre><br />
2- using custom attribute on service operations<br />
<br />
<br />
<pre class="brush: csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.Runtime.Serialization;
namespace MyWcfService
{
[Serializable]
public class DataContractSerializerCircularReferenceFixAttribute : Attribute, IOperationBehavior
{
private readonly DataContractSerializerCircularReferenceFixOperationBehavior _innerOperationBehavior;
public DataContractSerializerCircularReferenceFixAttribute()
{
}
public DataContractSerializerCircularReferenceFixAttribute(OperationDescription operation)
{
_innerOperationBehavior = new DataContractSerializerCircularReferenceFixOperationBehavior(operation);
}
public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)
{
if (_innerOperationBehavior == null)
return;
(_innerOperationBehavior as IOperationBehavior).AddBindingParameters(operationDescription, bindingParameters);
}
public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
ReplaceDataContractSerializerOperationBehavior(operationDescription);
}
public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
ReplaceDataContractSerializerOperationBehavior(operationDescription);
}
public void Validate(OperationDescription operationDescription)
{
if (_innerOperationBehavior == null)
return;
(_innerOperationBehavior as IOperationBehavior).Validate(operationDescription);
}
private void ReplaceDataContractSerializerOperationBehavior(OperationDescription description)
{
var operationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (operationBehavior == null)
return;
description.Behaviors.Remove(operationBehavior);
description.Behaviors.Add(new DataContractSerializerCircularReferenceFixOperationBehavior(description));
}
}
class DataContractSerializerCircularReferenceFixOperationBehavior : DataContractSerializerOperationBehavior
{
public DataContractSerializerCircularReferenceFixOperationBehavior(OperationDescription operation)
: base(operation)
{
}
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return new DataContractSerializer(type, name, ns, knownTypes, this.MaxItemsInObjectGraph, this.IgnoreExtensionDataObject, true, this.DataContractSurrogate);
}
public override XmlObjectSerializer CreateSerializer(Type type, System.Xml.XmlDictionaryString name, System.Xml.XmlDictionaryString ns, IList<Type> knownTypes)
{
return new DataContractSerializer(type, name, ns, knownTypes, this.MaxItemsInObjectGraph, this.IgnoreExtensionDataObject, true, this.DataContractSurrogate);
}
}
}
// WCF Service--------------------------------------
[ServiceContract]
public class MyService
{
[OperationContract]
[DataContractSerializerCircularReferenceFix]
public Customer GetCustomer(string id){
//code here
}
}
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com4tag:blogger.com,1999:blog-1701603541105674369.post-66414201715682822542013-12-24T10:08:00.000+11:002014-01-14T05:19:37.753+11:00JavaScriptSerializer issue with ExtensionDataObject<a name='more'></a><br />
I wanted to pass a WCF object to my application and then I was trying to serialize the object to json using JavaScriptSerializer and then deserialize it for using on the client side, I got an error when I tried to deserialize the text, no parameterless constructor defined for type of System.Runtime.Serialization.ExtensionDataObject. After some research, I found that the ExtensionData property in my WCF object is causing that issue, javascript serializer had no idea about that property. I found two options to solve that issue.<br />
<br/><br />
1- Use DataContractJsonSerializer instead of JavaScriptSerializer<br />
<br />
<pre class="brush: csharp"> public static class DataContractJsonSerializerUtil
{
public static string Serialize(object obj)
{
var jsonSerializer = new DataContractJsonSerializer(obj.GetType());
string returnValue = "";
using (var memoryStream = new MemoryStream())
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(memoryStream))
{
jsonSerializer.WriteObject(writer, obj);
writer.Flush();
returnValue = Encoding.UTF8.GetString(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}
}
return returnValue;
}
public static T Deserialize<T>(string json)
{
T returnValue;
using (var memoryStream = new MemoryStream())
{
byte[] jsonBytes = Encoding.UTF8.GetBytes(json);
memoryStream.Write(jsonBytes, 0, jsonBytes.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(memoryStream, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null))
{
var serializer = new DataContractJsonSerializer(typeof(T));
returnValue = (T)serializer.ReadObject(jsonReader);
}
}
return returnValue;
}
}
</pre>2- Register a converter for JavascriptSerializer<br />
<br />
<pre class="brush: csharp">public static class JavaScriptSerializerUtil
{
public static string Serialize(object obj)
{
var s = new JavaScriptSerializer();
return s.Serialize(obj);
}
public static T Deserialize<T>(string json)
{
var jss = new JavaScriptSerializer();
jss.RegisterConverters(new[] { new MyJsCustomConverter() });
var result = jss.Deserialize<T>(json);
return result;
}
}
public class MyJsCustomConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get
{
return new ReadOnlyCollection<Type>(new[] { typeof(ExtensionDataObject) });
}
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
return null;
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
return null;
}
}
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-76616767907958784722013-12-19T09:13:00.000+11:002014-05-08T04:07:46.212+10:00log4net configuration - one file per month<a name='more'></a><br />
<br />
You want to have an external log4net.config file and also need one log file per month.<br />
<br />
<pre class="brush: csharp">using log4net;
public class MyClass
{
private static readonly ILog Logger = LogManager.GetLogger(typeof(MyClass));
public Test()
{
//For debugging, To check if log4net configured correctly
bool log4netIsConfigured = log4net.LogManager.GetRepository().Configured;
Logger.Info("This is my log");
}
}
</pre><br />
You need to add an appSettings key called "log4net.Config" and then you can put an app-relative path to an external log4net.config file in there and everything will automatically works.<br />
That file path is relative to the application base directory (AppDomain.CurrentDomain.BaseDirectory), so if you put the external log4net file in the root of the application, for console applications, file path would be "../../log4net.config" and for web applications, It would be "log4net.config".<br />
<br />
web.config<br />
<pre class="brush: xml"><configuration>
<appsettings>
<add key="log4net.Config" value="log4net.config"></add>
</appSettings>
</configuration>
</pre><br />
log4net.config<br />
<pre class="brush: html"><log4net>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<lockingmodel type="log4net.Appender.FileAppender+MinimalLock"></lockingmodel>
<file type="log4net.Util.PatternString" value="log-.txt"></file>
<!--file name will be like log-2013-12.txt -->
<datepattern value="yyyy-MM" ></datepattern>
<preservelogfilenameextension value="true"></preservelogfilenameextension>
<staticlogfilename value="false" ></staticlogfilename>
<appendtofile value="true" ></appendtofile>
<rollingstyle value="Date" ></rollingstyle>
<layout type="log4net.Layout.PatternLayout">
<conversionpattern value="[%date] [%level] - %message%newline" ></conversionpattern>
</layout>
</appender>
<root>
<level value="INFO"></level>
<appender-ref ref="file"></appender-ref>
</root>
</log4net>
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com2tag:blogger.com,1999:blog-1701603541105674369.post-45395732753480104002012-02-06T08:00:00.000+11:002012-02-06T10:46:50.239+11:00What is JsonValue?<a name='more'></a><a href='http://msdn.microsoft.com/en-us/library/system.json.jsonvalue(v=vs.95).aspx' target='blank'>JsonValue</a> is the abstract base class for JavaScript Object Notation (JSON) common language runtime (CLR) types.<br />
If we get <a href='http://nuget.org/packages/JsonValue' target='blank'>JsonValue</a> package from nuget in VS2010, then the application will have a reference to Microsoft.Json.dll that will provide System.Json.JsonValue datatype. JsonValue is the abstarct base class and the JSON CLR types JsonPrimitive, JsonArray, and JsonObject all inherit from this base class.<br />
this is very useful when we need to create or parse json data.<br />
Here is an example how to use it.<br />
This method will grab all catalog entites from database using entity framework code first and then it will return only two properties of those entities as json data.<br />
<!-- code formatted by http://manoli.net/csharpformat/ --><br />
<pre class="csharpcode"><span class="kwrd">public</span> System.Json.JsonValue GetCatalogs()
{
DbContext context = <span class="kwrd">new</span> MyContext();
DbSet<T> dbSet = context.Set<Catalog>();
<span class="kwrd">var</span> list = dbSet.Select(s => <span class="kwrd">new</span> { s.CatalogId, s.CatName }).ToList();
<span class="kwrd">var</span> results = <span class="kwrd">new</span> System.Json.JsonArray();
<span class="kwrd">foreach</span> (<span class="kwrd">var</span> item <span class="kwrd">in</span> list)
{
dynamic obj = <span class="kwrd">new</span> System.Json.JsonObject();
obj.CatalogId = item.CatalogId;
obj.CatName = item.CatalogId;
results.Add(obj);
}
<span class="kwrd">return</span> results;
}</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com2tag:blogger.com,1999:blog-1701603541105674369.post-4367956811181669012012-01-21T03:50:00.000+11:002013-04-05T11:16:40.289+11:00How to Rename a blob on Azure<a name='more'></a><br />
I came across something today that I think it is good to share, blob names are case-sensitive in windows Azure. So I had to write a program to rename all blobs and change them to lower case. here is the code.<br />
<!-- code formatted by http://manoli.net/csharpformat/ --><br />
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> Microsoft.WindowsAzure;
<span class="kwrd">using</span> Microsoft.WindowsAzure.StorageClient;
<span class="kwrd">namespace</span> MyBlobRenameApp
{
<span class="kwrd">public</span> <span class="kwrd">class</span> Process
{
<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> RenameBlobs()
{
<span class="kwrd">string</span> blobConName = ConfigHelper.BlobContainerName;
<span class="kwrd">string</span> dataCenterSettingKey = <span class="str">"DefaultEndpointsProtocol="</span> +
ConfigHelper.DefaultEndpointsProtocol +
<span class="str">";AccountName="</span> +
ConfigHelper.AccountName +
<span class="str">";AccountKey="</span> +
ConfigHelper.AccountKey;
CloudStorageAccount cloudStorageAccount =
CloudStorageAccount.Parse(dataCenterSettingKey);
CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer container =
blobClient.GetContainerReference(blobConName);
<span class="rem">// Create the container if it does not exist.</span>
container.CreateIfNotExist();
<span class="rem">// Set permissions on the container.</span>
BlobContainerPermissions permissions = <span class="kwrd">new</span> BlobContainerPermissions();
containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
container.SetPermissions(permissions);
<span class="rem">//For example we have 2 blobs VSN/b1 and VSN/b2</span>
<span class="kwrd">var</span> blobs = container.GetDirectoryReference(<span class="str">"VSN"</span>).ListBlobs();
<span class="kwrd">foreach</span> (<span class="kwrd">var</span> item <span class="kwrd">in</span> blobs)
{
<span class="kwrd">string</span> blobUri = item.Uri.ToString();
CloudBlob existBlob = container.GetBlobReference(blobUri);
CloudBlob newBlob = container.GetBlobReference(blobUri.ToLower());
newBlob.CopyFromBlob(existBlob);
existBlob.Delete();
}
}
}
}
</pre><br />
<br />
Hopefully this post will be useful to somebody who runs into the same problem.<br />
Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com56tag:blogger.com,1999:blog-1701603541105674369.post-65362969876037693312011-12-13T08:08:00.000+11:002011-12-23T09:11:40.244+11:00how to return entities that have children with specific criteria in entity framework code first<a name='more'></a><br />
This is how we can return users that have orderes with specific product name. the Orders collection will be eagerly filtered and can be loaded.<br />
<br />
<!-- code formatted by http://manoli.net/csharpformat/ --><br />
<pre class="csharpcode"> <span class="kwrd">public</span> <span class="kwrd">class</span> User
{
<span class="kwrd">public</span> <span class="kwrd">int</span> UserId { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
<span class="kwrd">public</span> <span class="kwrd">string</span> UserName { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
<span class="kwrd">public</span> List<Order> Orders { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
}
<span class="kwrd">public</span> <span class="kwrd">class</span> Order
{
<span class="kwrd">public</span> <span class="kwrd">int</span> OrderId { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
<span class="kwrd">public</span> <span class="kwrd">int</span> UserId { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
<span class="kwrd">public</span> <span class="kwrd">decimal</span> Amount { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
<span class="kwrd">public</span> <span class="kwrd">string</span> ProductName { <span class="kwrd">get</span>; <span class="kwrd">set</span>; }
}
<span class="rem">//Assuming these two have been disabled</span>
((DbContext)_context).Configuration.ProxyCreationEnabled = <span class="kwrd">false</span>;
((DbContext)_context).Configuration.LazyLoadingEnabled = <span class="kwrd">false</span>;
<span class="rem">//No change tracking and caching </span>
<span class="kwrd">var</span> set1 = _context.Set<User>().AsNoTracking()
.Select(u => <span class="kwrd">new</span>
{ User = u,
Orders = u.Orders.Where(o => o.ProductName == <span class="str">"blahblah"</span>)
})
.Where(f => f.Orders.Count() > 0).ToList();
List<User> list1 = set1.Select(s => s.User).ToList();
<span class="rem">//result has the users that their orders children for each user has been loaded.</span>
<span class="kwrd">var</span> set2 = _context.Set<User>().AsNoTracking()
.Select(u => <span class="kwrd">new</span>
{ User = u,
Orders = u.Orders.Count(o => o.ProductName == <span class="str">"blahblah"</span>)
})
.Where(f => f.Orders > 0).ToList();
List<User> list2 = set2.Select(s => s.User).ToList();
<span class="rem">//result has the users that their orders children for each user has not been loaded.</span></pre><br />Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-91523149366462810342011-10-21T03:04:00.000+11:002011-10-21T03:04:45.011+11:00How to find duplicate items in a list of entities by LINQ<a name='more'></a><br />
I have a list of entities and I need to make sure that all entities have a unique Guid property.<br />
<br/><br />
<!-- code formatted by http://manoli.net/csharpformat/ --><br />
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> FeedDTO
{
<span class="kwrd">public</span> <span class="kwrd">string</span> Guid {get; set;}
<span class="kwrd">public</span> <span class="kwrd">string</span> Name {get; set;}
}
List<FeedDTO> feeds = GetAllFeeds();
<span class="rem">//Case 1:</span>
IEnumerable<<span class="kwrd">string</span>> distinct = feeds.Select(f => f.Guid).Distinct();
<span class="rem">//Case 2:</span>
IEnumerable<FeedDTO> distinct = feeds.GroupBy(f => f.Guid).Select(grp => grp.First());
<span class="kwrd">if</span> (feeds.Count != distinct.Count())
{
_logger.Info(<span class="kwrd">string</span>.Format(<span class="str">"{0} duplicate guid have been detected!"</span>,
feeds.Count - distinctFeeds.Count()));
}
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-15284411172531337212011-10-13T07:22:00.000+11:002011-10-13T07:22:02.494+11:00Reverse words in a string using Aggregate function in LINQ<a name='more'></a>
Aggregate is a cool function in LINQ that applies a function over a sequence.
<p>
Aggregate(TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> function)
</p>
That applies a function that takes a seed value to initialize the result and the next item in a sequence and returns a result. the second parameter is the delegate we pass that will be done on the sequence that takes a current total and the next value, and returns the new total. this works recursively for all the items in a sequence.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">string</span> str = <span class="str">"this is a sentence"</span>;
<span class="kwrd">string</span> result = str.Split(<span class="str">' '</span>).Aggregate(<span class="str">""</span>, (total, next) => next + <span class="str">" "</span> + total);
<span class="rem">//result : sentence a is this</span></pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-21639936262977139662011-08-26T04:51:00.001+10:002011-08-26T04:52:59.529+10:00How to retrieve specific columns in Entity Framework<a name='more'></a>
There are some cases that we do not want to retrieve all columns and we only need to grab some columns. Anonymous and dynamic types help to do that.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
var q = from c <span class="kwrd">in</span> context.Set<Content>()
<span class="kwrd">where</span> c.CatalogId == <span class="str">"ABC"</span>
select <span class="kwrd">new</span> { c.ContentId, c.ContentName };
OR
<span class="kwrd">IEnumerable</span><<span class="kwrd">dynamic</span>> q = context.Contents.Where(c => c.CatalogId == <span class="str">"ABC"</span>)
.Select(c => <span class="kwrd">new</span> {c.ContentId, c.ContentName});
<span class="rem">//By looking at the sql generated by this query q.ToString() we can see </span>
SELECT
[Extent1].[ContentId] AS [ContentId],
[Extent1].[ContentName] AS [ContentName]
FROM [dbo].[Content] AS [Extent1]
WHERE N<span class="str">'ABC'</span> = [Extent1].[CatalogId]
<span class="kwrd">public</span> IEnumerable<dynamic> Get<T>(DbContext context,
Expression<Func<T, <span class="kwrd">bool</span>>> exp,
Expression<Func<T, dynamic>> columns) <span class="kwrd">where</span> T : <span class="kwrd">class</span>
{
<span class="kwrd">return</span> context.Set<T>().Where<T>(exp).Select<T, dynamic>(columns);
}
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-14627248125538345802011-07-11T05:24:00.005+10:002011-07-12T00:09:10.793+10:00Knockout.js Sample<a name='more'></a>
According to <a href="http://knockoutjs.com/">Knockout</a> ,KO is a nice javascript library that helps to create rich UI with a clean underlying data model. we can create a view data model and bind that model to our UI. so any time that a section of UI changes, the view model will be changed automatically and reverse. knockout is promoting Model-View-ViewModel (MVVM) design pattern like in silverlight. When using KO, the view is simply your HTML document with declarative bindings to link it to the view model. Alternatively, we can use templates that generate HTML using data from your view model.
<br/>
I am trying to give it a shot and create a sample application using knockout.js
<br/>
//------------------------------------------------------<br/>
PersonHandler.ashx<br/>
//------------------------------------------------------<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<%@ WebHandler Language=<span class="str">"C#"</span> Class=<span class="str">"PersonHandler"</span> %>
<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Web;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Runtime.Serialization.Json;
<span class="kwrd">using</span> System.IO;
<span class="kwrd">public</span> <span class="kwrd">class</span> Person
{
<span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }
<span class="kwrd">public</span> <span class="kwrd">string</span> Phone { get; set; }
}
<span class="kwrd">public</span> <span class="kwrd">class</span> PersonHandler : IHttpHandler {
<span class="kwrd">public</span> <span class="kwrd">void</span> ProcessRequest (HttpContext context) {
<span class="rem">//If the method is POST</span>
<span class="rem">//string name = context.Request.Form["name"];</span>
<span class="rem">//If the method is GET</span>
<span class="rem">//string name = context.Request.QueryString["name"];</span>
<span class="kwrd">if</span> (context.Request.RequestType == <span class="str">"GET"</span>)
{
<span class="kwrd">if</span> (context.Request.QueryString[<span class="str">"pwd"</span>] != <span class="str">"123"</span>)
{
context.Response.ContentType = <span class="str">"application/json"</span>;
context.Response.Write(<span class="str">""</span>);
context.Response.End();
}
List<Person> list = <span class="kwrd">new</span> List<Person>();
list.Add(<span class="kwrd">new</span> Person() { Name = <span class="str">"aaa"</span>, Phone = <span class="str">"1111"</span> });
list.Add(<span class="kwrd">new</span> Person() { Name = <span class="str">"bbb"</span>, Phone = <span class="str">"222"</span> });
list.Add(<span class="kwrd">new</span> Person() { Name = <span class="str">"cccc"</span>, Phone = <span class="str">"3333"</span> });
<span class="kwrd">string</span> str = <span class="str">""</span>;
DataContractJsonSerializer serilizer = <span class="kwrd">new</span> DataContractJsonSerializer(<span class="kwrd">typeof</span>(List<Person>));
<span class="kwrd">using</span> (MemoryStream ms = <span class="kwrd">new</span> MemoryStream())
{
serilizer.WriteObject(ms, list);
ms.Position = 0;
StreamReader sr = <span class="kwrd">new</span> StreamReader(ms);
str = sr.ReadToEnd();
sr.Dispose();
}
context.Response.ContentType = <span class="str">"application/json"</span>;
context.Response.Write(str);
context.Response.End();
}
<span class="kwrd">else</span>
{
<span class="rem">//RequestType is POST</span>
<span class="kwrd">string</span> json = context.Request.Form[<span class="str">"persons"</span>];
DataContractJsonSerializer serilizer = <span class="kwrd">new</span> DataContractJsonSerializer(<span class="kwrd">typeof</span>(List<Person>));
System.Text.UTF8Encoding en = <span class="kwrd">new</span> System.Text.UTF8Encoding();
<span class="kwrd">int</span> count = 0;
<span class="kwrd">using</span> (MemoryStream ms = <span class="kwrd">new</span> MemoryStream(en.GetBytes(json)))
{
List<Person> list = (List<Person>) serilizer.ReadObject(ms);
count = list.Count;
}
context.Response.ContentType = <span class="str">"application/json"</span>;
context.Response.Write(<span class="str">"\""</span> + count.ToString() + <span class="str">" saved successfully\""</span>);
context.Response.End();
}
}
<span class="kwrd">public</span> <span class="kwrd">bool</span> IsReusable {
get {
<span class="kwrd">return</span> <span class="kwrd">false</span>;
}
}
}
</pre>
//----------------------------------------------------------------------<br/>
lookup.html page using jquery ajax to call the server http handler.<br/>
//----------------------------------------------------------------------<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script src=<span class="str">"http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"</span> type=<span class="str">"text/javascript"</span>></script>
<script src=<span class="str">"http://cdnjs.cloudflare.com/ajax/libs/knockout/1.2.1/knockout-min.js"</span> type=<span class="str">"text/javascript"</span>></script>
<script src=<span class="str">"http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"</span> type=<span class="str">"text/javascript"</span>></script>
<script src=<span class="str">"https://raw.github.com/riklomas/quicksearch/master/jquery.quicksearch.js"</span> type=<span class="str">"text/javascript"</span>></script>
<script type=<span class="str">"text/javascript"</span>>
<span class="kwrd">var</span> viewModel;
$(document).ready(<span class="kwrd">function</span> () {
viewModel = {
<span class="rem">// persons: new ko.observableArray([{ Name: ko.observable("aaaaa"), Phone: ko.observable("111111") },</span>
<span class="rem">// { Name: ko.observable("bbbb"), Phone: ko.observable("222222") }</span>
<span class="rem">// ]),</span>
<span class="rem">// </span>
persons: <span class="kwrd">new</span> ko.observableArray([]),
addPerson: <span class="kwrd">function</span> () {
<span class="kwrd">if</span> (<span class="kwrd">this</span>.itemToAdd().Name().length == 0 || <span class="kwrd">this</span>.itemToAdd().Phone().length == 0) {
alert(<span class="str">"required missing!"</span>);
<span class="kwrd">return</span>;
}
<span class="kwrd">for</span> (<span class="kwrd">var</span> x <span class="kwrd">in</span> <span class="kwrd">this</span>.persons()) {
<span class="kwrd">if</span> (<span class="kwrd">this</span>.persons()[x].Name() == <span class="kwrd">this</span>.itemToAdd().Name() && <span class="kwrd">this</span>.persons()[x].Phone() == <span class="kwrd">this</span>.itemToAdd().Phone()) {
alert(<span class="str">"name must be unique!"</span>);
<span class="kwrd">return</span>;
}
}
<span class="kwrd">this</span>.persons.push({ Name: <span class="kwrd">new</span> ko.observable(<span class="kwrd">this</span>.itemToAdd().Name()), Phone: <span class="kwrd">new</span> ko.observable(<span class="kwrd">this</span>.itemToAdd().Phone()) });
<span class="kwrd">this</span>.itemToAdd().Name(<span class="str">""</span>);
<span class="kwrd">this</span>.itemToAdd().Phone(<span class="str">""</span>);
},
itemToAdd: <span class="kwrd">new</span> ko.observable({ Name: ko.observable(<span class="str">""</span>), Phone: ko.observable(<span class="str">""</span>) }),
removePerson: <span class="kwrd">function</span> (person) { <span class="kwrd">if</span> (window.confirm(<span class="str">"Are you sure to delete?"</span>) == <span class="kwrd">true</span>) { <span class="kwrd">this</span>.persons.remove(person); } },
updatePerson: <span class="kwrd">function</span> (person) {
<span class="rem">//notify the subscribers to update</span>
<span class="rem">//this.persons.valueHasMutated();</span>
<span class="rem">//ko.applyBindings(viewModel, document.getElementById('lst'));</span>
},
load: <span class="kwrd">function</span> () {
<span class="kwrd">var</span> pwd = $(<span class="str">"#txtPwd"</span>).val();
$.ajax({
type: <span class="str">"GET"</span>,
url: <span class="str">"PersonHandler.ashx?pwd="</span> + pwd,
<span class="rem">//contentType: "application/json",</span>
<span class="rem">//dataType: "json",</span>
<span class="rem">//data: "{'pwd':'" + pwd + "'}",</span>
success: <span class="kwrd">function</span> (result) {
<span class="rem">//var json = eval('(' + result.d + ')');</span>
<span class="kwrd">if</span> (result == <span class="str">""</span>) {
viewModel.isAuthenticated(<span class="kwrd">false</span>);
viewModel.persons([]);
<span class="kwrd">return</span>;
}
viewModel.isAuthenticated(<span class="kwrd">true</span>);
viewModel.persons([]);
<span class="kwrd">for</span> (<span class="kwrd">var</span> i = 0; i < result.length; i++) {
viewModel.persons.push({ Name: <span class="kwrd">new</span> ko.observable(result[i].Name), Phone: <span class="kwrd">new</span> ko.observable(result[i].Phone) });
}
<span class="rem">//ToDo QuickSearch</span>
$(<span class="str">'#txtSearch'</span>).quicksearch(<span class="str">'#tbl tbody tr'</span>);
},
error: <span class="kwrd">function</span> (errMsg) {
alert(errMsg);
}
});
},
save: <span class="kwrd">function</span> () {
<span class="kwrd">var</span> jsonVal = ko.toJSON(viewModel.persons());
$.ajax({
type: <span class="str">"POST"</span>,
url: <span class="str">"PersonHandler.ashx"</span>,
<span class="rem">//contentType: "application/json",</span>
dataType: <span class="str">"json"</span>,
data: { <span class="str">"persons"</span>: jsonVal },
success: <span class="kwrd">function</span> (result) {
alert(result);
},
error: <span class="kwrd">function</span> (errMsg) {
alert(errMsg);
}
});
},
isAuthenticated: <span class="kwrd">new</span> ko.observable(<span class="kwrd">false</span>),
editRowId: <span class="kwrd">new</span> ko.observable(<span class="str">""</span>),
getUniqueName: <span class="kwrd">function</span> (item) { <span class="kwrd">return</span> item.Name() + item.Phone(); },
beginEdit: <span class="kwrd">function</span> (obj) {
<span class="kwrd">this</span>.editRowId(obj.Name() + obj.Phone());
},
cancelEdit: <span class="kwrd">function</span> (obj) {
<span class="kwrd">this</span>.editRowId(<span class="str">""</span>);
}
};
ko.applyBindings(viewModel);
});
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<script type=<span class="str">"text/html"</span> id=<span class="str">"myTemplate"</span>>
<tr>
{{<span class="kwrd">if</span> $item.editRowId() == $item.getUniqueName($item.data) }}
<td><input type=<span class="str">"text"</span> data-bind=<span class="str">"value: Name"</span>/></td>
<td><input type=<span class="str">"text"</span> data-bind=<span class="str">"value: Phone"</span>/></td>
<td><a href=<span class="str">"#"</span> data-bind=<span class="str">"click: function() { viewModel.updatePerson($item.data) }"</span>>Update</a></td>
<td><a href=<span class="str">"#"</span> data-bind=<span class="str">"click: function() { viewModel.cancelEdit(this) }"</span>>Cancel</a></td>
{{<span class="kwrd">else</span>}}
<td><span data-bind=<span class="str">"text: Name"</span>></td>
<td><span data-bind=<span class="str">"text: Phone"</span>></span></td>
<td><a href=<span class="str">"#"</span> data-bind=<span class="str">"click: function() { viewModel.beginEdit(this) }"</span>>Edit</a></td>
<td><a href=<span class="str">"#"</span> data-bind=<span class="str">"click: function() { viewModel.removePerson($item.data) }"</span>>Delete</a></td>
{{/<span class="kwrd">if</span>}}
</tr>
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
Password:<span class="attr">&nbsp;</span><span class="attr">&nbsp;</span><span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="password"</span> <span class="attr">id</span><span class="kwrd">="txtPwd"</span> <span class="kwrd">/></span><span class="attr">&nbsp;</span><span class="attr">&nbsp;</span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">value</span><span class="kwrd">="Load Data"</span> <span class="attr">data-bind</span><span class="kwrd">="click: load"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">data-bind</span><span class="kwrd">="visible: isAuthenticated"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">fieldset</span> <span class="attr">style</span><span class="kwrd">="width:300px"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">legend</span><span class="kwrd">></span>Add Names<span class="kwrd"></</span><span class="html">legend</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="txtName"</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">label</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">id</span><span class="kwrd">="txtName"</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">data-bind</span><span class="kwrd">="value: viewModel.itemToAdd().Name"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="txtPhone"</span><span class="kwrd">></span>Phone<span class="kwrd"></</span><span class="html">label</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="txtPhone"</span> <span class="attr">data-bind</span><span class="kwrd">="value: viewModel.itemToAdd().Phone"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">id</span><span class="kwrd">="btnAdd"</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">value</span><span class="kwrd">="Add To List"</span> <span class="attr">data-bind</span><span class="kwrd">="click: addPerson"</span> <span class="kwrd">/></span>
<span class="kwrd"></</span><span class="html">fieldset</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">data-bind</span>="<span class="attr">visible:</span> <span class="attr">persons</span>().<span class="attr">length</span> <span class="kwrd">></span> 0"<span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="rem"><!-- Existing Names:<br /></span>
<span class="rem"> <select id="lst" name="lst" multiple="multiple" data-bind="options: persons, optionsText: function(item){ return item.fname() + ' ' + item.lname()}, value: 'fname'"></span>
<span class="rem"> </select>--></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
Search:<span class="attr">&nbsp;</span><span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="txtSearch"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">id</span><span class="kwrd">="tbl"</span> <span class="attr">width</span><span class="kwrd">="450"</span> <span class="attr">cellspacing</span><span class="kwrd">="1"</span> <span class="attr">cellpadding</span><span class="kwrd">="3"</span> <span class="attr">data-bind</span>="<span class="attr">visible:</span> <span class="attr">persons</span>().<span class="attr">length</span> <span class="kwrd">></span> 0"<span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span> <span class="attr">style</span><span class="kwrd">="Color:#ffffff;background-color:#344262"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>Phone<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tbody</span> <span class="attr">data-bind</span><span class="kwrd">="template: {name:'myTemplate', foreach: persons, templateOptions: { editRowId : editRowId, getUniqueName: getUniqueName} }"</span> <span class="kwrd">></</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnSave"</span> <span class="attr">value</span><span class="kwrd">="Save list"</span> <span class="attr">data-bind</span>="<span class="attr">click:</span> <span class="attr">save</span>, <span class="attr">enable:</span> <span class="attr">persons</span>().<span class="attr">length</span> <span class="kwrd">></span> 0" <span class="kwrd">/></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span>
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-74954499354108966952011-07-05T05:35:00.002+10:002011-07-05T05:35:00.349+10:00How to pass anonymous type as a method parameter using dynamic with LINQ<a name='more'></a>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">public</span> <span class="kwrd">class</span> test
{
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> Process()
{
<span class="kwrd">using</span> (MyContext context = <span class="kwrd">new</span> MyContext())
{
var query = (from c <span class="kwrd">in</span> context.MyContents
join v <span class="kwrd">in</span> context.MyContentVersions
on <span class="kwrd">new</span> { contentId = c.ContentId, verGmt = (DateTime)c.PubVerGmt }
equals <span class="kwrd">new</span> { contentId = v.ContentId, verGmt = v.VerGmt }
<span class="kwrd">where</span>
c.PubVerGmt != <span class="kwrd">null</span>
&& c.CatId == ConfigHelper.CatId
&& System.Data.Objects.SqlClient.SqlFunctions.DateDiff(<span class="str">"day"</span>, v.VerGmt, DateTime.Now) < ConfigHelper.Days
select <span class="kwrd">new</span>
{
ContentId = v.ContentId,
VerGmt = v.VerGmt,
Body = v.Body,
Format = c.FormatId,
CatId = c.CatId
}).OrderByDescending(a => a.ContentId);
IQueryable<dynamic> q = query <span class="kwrd">as</span> IQueryable<dynamic>;
<span class="kwrd">int</span> maxNumberOfImage = ConfigHelper.MaxNumberOfImage;
<span class="kwrd">if</span> (maxNumberOfImage > -1)
{
q = q.Take(maxNumberOfImage);
}
<span class="kwrd">return</span> SaveImages(q);
}
}
<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> SaveImages(IEnumerable<dynamic> contents)
{
<span class="kwrd">string</span> filename = <span class="str">""</span>;
<span class="kwrd">foreach</span> (var item <span class="kwrd">in</span> contents)
{
filename = item.CatId + <span class="str">"-"</span> + item.ContentId.ToString();
<span class="kwrd">using</span> (MemoryStream memStream = <span class="kwrd">new</span> MemoryStream(item.Body))
{
Bitmap bitmap = <span class="kwrd">new</span> Bitmap(memStream);
bitmap.Save(filename, ImageHelper.GetImageFormat(item.Format));
}
}
<span class="kwrd">return</span> <span class="kwrd">true</span>;
}
}
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-11362920296238163822011-07-01T04:28:00.003+10:002011-07-03T04:30:04.084+10:00Using google app engine as my CDN<a name='more'></a>
CDN (Content Delivery Network) is a set of servers spread around the world that serves files from the nearest location. we can set up a CDN for our static files on google app engine.
<br/>
<p><b>Steps:</b></p>
1- create an account on Google app engine <br/>
<a href="http://appengine.google.com" target="blank">appengine.google.com</a><br/><br/>
2- choose a unique application id (for example: MyApp) and create an application on app engine<br/><br/>
3- download and install Python on <br/>
<a href="http://www.python.org/" target=blank">http://www.python.org/</a><br/><br/>
4- download and install Google App Engine SDK on <br/>
<a href="http://code.google.com/appengine/downloads.html">http://code.google.com/appengine/downloads.html</a><br/><br/>
5- create a folder the same name as the application id with this structure:<br/>
MyApp<br/>
static<br/>
css<br/>
javascript<br/>
images<br/>
pages<br/>
<br/>
6- create a file call app.yaml and put it at the top-level, inside the folder MyApp.<br/> that file has these lines: (identation is important in this file)<br/>
<br/>
application: MyApp<br/>
version: 1<br/>
runtime: python<br/>
api_version: 1<br/>
<br/>
handlers: <br/>
- url: /static<br/>
static_dir: static<br/>
<br/>
<br/>
7- upload the project files to app engine, using the command line:<br/>
<br/>
<b>cd c:\saeed\test\MyApp</b>
<br/>
<b>appcfg.py update .</b>
<br/>
<br/>
8- check http://MyApp.appspot.com/static/images/blahblah.jpg and enjoy.Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-77807774785147872292011-06-23T01:36:00.006+10:002011-07-13T02:33:42.340+10:00DateDiff in linq EF 4.0<a name='more'></a>
We can use this <b>System.Data.Objects.SqlClient.SqlFunctions.DateDiff</b> (.Net 4) function.
<br/>
This is a sample query:
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">using</span> System.Data.Objects.SqlClient;
<span class="kwrd">var</span> query = (from c <span class="kwrd">in</span> context.MyContents
join v <span class="kwrd">in</span> context.MyContentVersions
on <span class="kwrd">new</span> { contentId = c.ContentId, versiongmt = (DateTime)c.PublishedVersionGmt }
equals <span class="kwrd">new</span> { contentId = v.ContentId, versiongmt = v.VersionGmt }
<span class="kwrd">where</span>
c.PublishedVersionGmt != <span class="kwrd">null</span>
&& c.CatalogId == ConfigHelper.CatalogId
&& <b>SqlFunctions.DateDiff</b>(<span class="str">"day"</span>,v.VersionGmt, DateTime.Now) < ConfigHelper.Days
select <span class="kwrd">new</span>
{
ContentId = v.ContentId,
VesrionGmt = v.VersionGmt,
ContentFormat = c.ContentFormatId,
CatalogId = c.CatalogId
}).OrderByDescending(a => a.ContentId).Take(20);
</pre>
<p>
However, we should pay attention when we use DateDiff, this query might not be very efficient because it is not sargable because there is a function on the column, whenever you use a function on the column you will not get an index seek but an index scan. so makes the query very slow. A query is called to be sargable if the database engine can take advantage of an index to speed up the execution of the query using index seek instead of index scan.
</p>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-24248496930472528242011-06-21T02:04:00.006+10:002011-06-21T02:04:00.544+10:00Jquery template sample<a name='more'></a>
First I will add a generic handler to my asp.net website like below and then create a new page to use jquery ajax to call the httphandler and then using jquery template to show the data.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<%@ WebHandler Language=<span class="str">"C#"</span> Class=<span class="str">"PersonHandler"</span> %>
<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Web;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Runtime.Serialization.Json;
<span class="kwrd">using</span> System.IO;
<span class="kwrd">public</span> <span class="kwrd">class</span> PersonHandler : IHttpHandler {
<span class="kwrd">public</span> <span class="kwrd">void</span> ProcessRequest (HttpContext context) {
<span class="rem">//If method is POST</span>
<span class="rem">//string name = context.Request.Form["name"];</span>
<span class="rem">//If method is GET</span>
<span class="rem">//string name = context.Request.QueryString["name"];</span>
List<Person> list = <span class="kwrd">new</span> List<Person>();
list.Add(<span class="kwrd">new</span> Person() { ID = 1, Name = <span class="str">"abc"</span> });
list.Add(<span class="kwrd">new</span> Person() { ID = 2, Name = <span class="str">"xcv"</span> });
list.Add(<span class="kwrd">new</span> Person() { ID = 3, Name = <span class="str">"klp"</span> });
<span class="kwrd">string</span> str = <span class="str">""</span>;
DataContractJsonSerializer serilizer = <span class="kwrd">new</span> DataContractJsonSerializer(<span class="kwrd">typeof</span>(List<Person>));
<span class="kwrd">using</span> (MemoryStream ms = <span class="kwrd">new</span> MemoryStream())
{
serilizer.WriteObject(ms, list);
ms.Position = 0;
StreamReader sr = <span class="kwrd">new</span> StreamReader(ms);
str = sr.ReadToEnd();
sr.Dispose();
}
context.Response.ContentType = <span class="str">"application/json"</span>;
context.Response.Write(str);
}
<span class="kwrd">public</span> <span class="kwrd">bool</span> IsReusable {
get {
<span class="kwrd">return</span> <span class="kwrd">false</span>;
}
}
}
<span class="kwrd">public</span> <span class="kwrd">class</span> Person
{
<span class="kwrd">public</span> <span class="kwrd">int</span> ID { get; set; }
<span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }
}
</pre>
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script src=<span class="str">"http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"</span> type=<span class="str">"text/javascript"</span>></script>
<script type=<span class="str">"text/javascript"</span>>
$(document).ready(<span class="kwrd">function</span> () {
$(<span class="str">"#btnLoad"</span>).click(<span class="kwrd">function</span> () {
$.ajax({
type: <span class="str">"POST"</span>,
data: {<span class="str">"name"</span>:<span class="str">"ssss"</span>},
url: <span class="str">"PersonHandler.ashx"</span>,
<span class="rem">//contentType: "application/json; charset=utf-8",</span>
contentType: <span class="str">"application/x-www-form-urlencoded"</span>, <span class="rem">// should be like this for httphandler to work</span>
dataType: <span class="str">"json"</span>,
success: <span class="kwrd">function</span> (msg) {
<span class="kwrd">if</span> (msg.d == <span class="kwrd">null</span>)
Process(msg);
<span class="kwrd">else</span>
Process(msg.d);
},
error: <span class="kwrd">function</span> (e) {
alert(<span class="str">"failed"</span>);
}
});
});
});
<span class="kwrd">function</span> Process(data) {
<span class="rem">//var data = [{ Name: "abc", ID: 1 }, { Name: "def", ID: 2 }, { Name: "ghi", ID: 3}];</span>
<span class="rem">//compile the template</span>
$.template(<span class="str">"tmp"</span>, $(<span class="str">"#mytmpl"</span>));
<span class="rem">//render the compiled template</span>
$.tmpl(<span class="str">"tmp"</span>, data).appendTo(<span class="str">"#container"</span>);
}
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<script id=<span class="str">"mytmpl"</span> type=<span class="str">"text/html"</span>>
<li>${Name} , ${ID}</li>
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnLoad"</span> <span class="attr">value</span><span class="kwrd">="Load Data"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">ul</span> <span class="attr">id</span><span class="kwrd">="container"</span><span class="kwrd">></</span><span class="html">ul</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span></pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-47451617815776143122011-06-14T06:20:00.005+10:002011-06-18T06:01:22.132+10:00Edit html table using jquery ui modal dialog<a name='more'></a>
<a href="http://jqueryui.com/" target="blank">jquery ui</a> is awesome, I used the jquery and jquery ui hosted on google CDN and made an example to show how to edit the html table using jquery ui modal dialog.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script src=<span class="str">"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"</span> type=<span class="str">"text/javascript"</span>></script>
<link href=<span class="str">"http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/eggplant/jquery-ui.css"</span> rel=<span class="str">"stylesheet"</span> type=<span class="str">"text/css"</span> />
<!-- jQuery UI Themes: <span class="kwrd">base</span>,black-tie,blitzer,cupertino,dark-hive,dot-luv,eggplant,excite-bike -->
<!-- flick,humanity,le-frog,Smoothness,Sunny,start,Vader,ui-darkness... -->
<script type=<span class="str">"text/javascript"</span>>
$(document).ready(<span class="kwrd">function</span> () {
$(<span class="str">"#dialog:ui-dialog"</span>).dialog(<span class="str">"destroy"</span>);
$(<span class="str">"#dialog-form"</span>).dialog({
autoOpen: <span class="kwrd">false</span>,
height: 250,
width: 300,
modal: <span class="kwrd">true</span>,
buttons: {
<span class="str">"Submit"</span>: <span class="kwrd">function</span> () {
<span class="kwrd">var</span> fname = $(<span class="str">"#firstname"</span>).val();
<span class="kwrd">var</span> lname = $(<span class="str">"#lastname"</span>).val();
<span class="kwrd">var</span> index = $(<span class="str">"#hidIndex"</span>).val();
<span class="kwrd">var</span> row = $(<span class="str">"#users tbody tr:nth-child("</span> + parseInt(index) + <span class="str">")"</span>);
row.find(<span class="str">':nth-child(1)'</span>).get(0).innerHTML = fname;
row.find(<span class="str">':nth-child(2)'</span>).get(0).innerHTML = lname;
$(<span class="kwrd">this</span>).dialog(<span class="str">"close"</span>);
},
Cancel: <span class="kwrd">function</span> () {
$(<span class="kwrd">this</span>).dialog(<span class="str">"close"</span>);
}
},
close: <span class="kwrd">function</span> () { }
});
$(<span class="str">".edit"</span>).button().click(<span class="kwrd">function</span> () {
<span class="kwrd">var</span> index = $(<span class="kwrd">this</span>).attr(<span class="str">"id"</span>).split(<span class="str">"_"</span>)[1];
<span class="kwrd">var</span> row = $(<span class="str">"#users tbody tr:nth-child("</span> + parseInt(index) + <span class="str">")"</span>);
<span class="kwrd">var</span> fname = row.find(<span class="str">':nth-child(1)'</span>).text();
<span class="kwrd">var</span> lname = row.find(<span class="str">':nth-child(2)'</span>).text();
$(<span class="str">"#firstname"</span>).val(fname);
$(<span class="str">"#lastname"</span>).val(lname);
$(<span class="str">"#hidIndex"</span>).val(index);
$(<span class="str">"#dialog-form"</span>).dialog(<span class="str">"open"</span>);
});
});
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">="dialog-form"</span> <span class="attr">title</span><span class="kwrd">="Edit Names"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">fieldset</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="firstname"</span><span class="kwrd">></span>FirstName:<span class="kwrd"></</span><span class="html">label</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">name</span><span class="kwrd">="firstname"</span> <span class="attr">id</span><span class="kwrd">="firstname"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="lastname"</span><span class="kwrd">></span>LastName:<span class="kwrd"></</span><span class="html">label</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">name</span><span class="kwrd">="lastname"</span> <span class="attr">id</span><span class="kwrd">="lastname"</span> <span class="kwrd">/></span>
<span class="kwrd"></</span><span class="html">fieldset</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">value</span><span class="kwrd">=""</span> <span class="attr">id</span><span class="kwrd">="hidIndex"</span> <span class="kwrd">/></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">="users-contain"</span> <span class="attr">class</span><span class="kwrd">="ui-widget"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">h1</span><span class="kwrd">></span>Users:<span class="kwrd"></</span><span class="html">h1</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">id</span><span class="kwrd">="users"</span> <span class="attr">class</span><span class="kwrd">="ui-widget ui-widget-content"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span> <span class="attr">class</span><span class="kwrd">="ui-widget-header "</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>FirstName<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>LastName<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Ema<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Russi<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnEdit_1"</span> <span class="attr">value</span><span class="kwrd">="Edit"</span> <span class="attr">class</span><span class="kwrd">="edit"</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Jack<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Loren<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnEdit_2"</span> <span class="attr">value</span><span class="kwrd">="Edit"</span> <span class="attr">class</span><span class="kwrd">="edit"</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Dean<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>shaun<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnEdit_3"</span> <span class="attr">value</span><span class="kwrd">="Edit"</span> <span class="attr">class</span><span class="kwrd">="edit"</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span>
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-54348890415982263622011-05-20T02:19:00.006+10:002011-10-21T02:29:55.951+11:00Some Github instructions<a name='more'></a>
I was playing with Github today and just wanted to keep the useful instructions.
<br/>
<b>Global setup:</b><br/>
----------------------<br/>
Download and install Git<br/>
git config --global user.name "Your Name"<br/>
git config --global user.email {username}@yahoo.com<br/>
<br/>
<b>Next steps:</b><br/>
----------------------<br/>
mkdir projectname<br/>
cd projectname<br/>
git init<br/>
git remote add origin git@github.com:{username}/{RepositoryName}.git<br/>
<br/>
<b>Commit and push to Github</b><br/>
-------------------------------<br/>
git add -A<br/>
git commit -am "message"<br/>
git push origin master<br/>
<br/>
<b>To get the latest version from Github to your local:</b><br/>
---------------------------------------------------------<br/>
git pull origin master<br/>
<br/>
<p>
to simply download a repository as a ZIP file: add the extra path '/zipball/master/' to the end of the repository URL and it gives you a zip file to download.
</p>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-35995019739137878562011-04-13T02:32:00.000+10:002011-04-13T02:32:30.372+10:00How to Extract data from html table and list using Jquery map function<a name='more'></a>
According to wikipedia.org, map is the name of a higher-order function that applies a given function element-wise to a list of elements and returns a list of results. So it let you to transform the items of a list by applying a given function to each item and returning the list of results.
<br/>
<a href="http://api.jquery.com/map/" target="blank">Jquery API map()</a>
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="asp"><%@ Page Language="C#" AutoEventWireup="true"
CodeFile="test.aspx.cs" Inherits="test" %></span>
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span> <span class="attr">PUBLIC</span> <span class="kwrd">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span>
<span class="kwrd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script language=<span class="str">"javascript"</span> type=<span class="str">"text/javascript"</span>>
$(document).ready(<span class="kwrd">function</span> () {
<span class="kwrd">var</span> a = $(<span class="str">'#tbl tr'</span>).map(<span class="kwrd">function</span> () {
<span class="kwrd">var</span> $row = $(<span class="kwrd">this</span>);
<span class="kwrd">return</span> {
Num: $row.find(<span class="str">':nth-child(1)'</span>).text(),
Name: $row.find(<span class="str">':nth-child(2)'</span>).text()
};
}).get();
alert(a[0].Num);
alert(a[0].Name);
<span class="rem">//----------------------------------------------------------</span>
<span class="kwrd">var</span> str = $(<span class="str">'#list :checkbox'</span>).map(<span class="kwrd">function</span> () {
<span class="kwrd">return</span> <span class="kwrd">this</span>.id + <span class="str">'-'</span> + $(<span class="kwrd">this</span>).attr(<span class="str">'checked'</span>);
}).get().join(<span class="str">','</span>);
alert(str);
});
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">form</span> <span class="attr">id</span><span class="kwrd">="form1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">id</span><span class="kwrd">="tbl"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>111<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>row1<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>222<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>row2<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>333<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>row3<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">ul</span> <span class="attr">id</span><span class="kwrd">="list"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">li</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="checkbox"</span> <span class="attr">id</span><span class="kwrd">="ch1"</span> <span class="attr">checked</span><span class="kwrd">="checked"</span> <span class="kwrd">/></</span><span class="html">li</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">li</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="checkbox"</span> <span class="attr">id</span><span class="kwrd">="ch2"</span> <span class="kwrd">/></</span><span class="html">li</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">li</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="checkbox"</span> <span class="attr">id</span><span class="kwrd">="ch3"</span> <span class="attr">checked</span><span class="kwrd">="checked"</span> <span class="kwrd">/></</span><span class="html">li</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">ul</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">form</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span>
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-81406930601764748772011-03-25T06:04:00.000+11:002011-03-25T06:04:24.757+11:00How to select the row with max/min value in each group in SQL<a name='more'></a>
For example we have a Cars table:
<br/>
Cars(CategoryID,Model,Price)
<br/>
Let's say we want to select the cheapest car in each category,
<br/>
First we need to group the cars by CategoryID and choose the min price,
<br/>
Then, select the rest of the row by joining that result back to the same table (self join)
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">SELECT</span> c.CategoryID, c.Model, c.Price
<span class="kwrd">FROM</span>
(
<span class="kwrd">SELECT</span> CategoryID, <span class="kwrd">MIN</span>(Price) <span class="kwrd">as</span> MinPrice
<span class="kwrd">FROM</span> Cars
<span class="kwrd">GROUP</span> <span class="kwrd">BY</span> CategoryID
) <span class="kwrd">AS</span> x
<span class="kwrd">INNER</span> <span class="kwrd">JOIN</span> Cars <span class="kwrd">AS</span> c
<span class="kwrd">ON</span> c.CategoryID = x.CategoryID <span class="kwrd">AND</span> c.Price = x.MinPrice
</pre>
<br/>
<b>Select the top 2 rows from each group</b>
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">SELECT</span> CategoryID, Model, Price
<span class="kwrd">FROM</span> Cars
<span class="kwrd">WHERE</span>
(
<span class="kwrd">SELECT</span> <span class="kwrd">COUNT</span>(*) <span class="kwrd">FROM</span> Cars <span class="kwrd">as</span> c
<span class="kwrd">where</span> c.CategoryID = Cars.CategoryID <span class="kwrd">AND</span> c.Price < Cars.Price
) <= 2
</pre>
<br/>
OR something like this
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
(<span class="kwrd">SELECT</span> * <span class="kwrd">from</span> Cars <span class="kwrd">WHERE</span> CategoryID = 1 <span class="kwrd">ORDER</span> <span class="kwrd">BY</span> Price <span class="kwrd">LIMIT</span> 2)
<span class="kwrd">UNION</span> <span class="kwrd">ALL</span>
(<span class="kwrd">SELECT</span> * <span class="kwrd">from</span> Cars <span class="kwrd">WHERE</span> CategoryID = 2 <span class="kwrd">ORDER</span> <span class="kwrd">BY</span> Price <span class="kwrd">LIMIT</span> 2)
<span class="kwrd">UNION</span> <span class="kwrd">ALL</span>
(<span class="kwrd">SELECT</span> * <span class="kwrd">from</span> Cars <span class="kwrd">WHERE</span> CategoryID = 3 <span class="kwrd">ORDER</span> <span class="kwrd">BY</span> Price <span class="kwrd">LIMIT</span> 2)
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-12857771375243028862011-03-17T06:52:00.013+11:002011-06-23T02:29:35.552+10:00How to do XML Serialization for entities<a name='more'></a>
I am going to write some helper functions to use for serialization.
<br/>
This function can serialize and deserialize an entity or List of entities and you can specify how you need to serialize your entity, if the properties should be ax XML element or they should be attributes and also the root name can be set.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">using</span> System.Xml;
<span class="kwrd">using</span> System.Xml.Serialization;
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> Utility
{
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> SerializeXML<T>(T obj, <span class="kwrd">bool</span> isObjPropAsElement, <span class="kwrd">string</span> rootElementName,
<span class="kwrd">bool</span> indentElements, <span class="kwrd">bool</span> omitXmlDeclaration, Type[] extraTypes)
{
<span class="kwrd">string</span> val = <span class="kwrd">null</span>;
<span class="kwrd">if</span> (obj != <span class="kwrd">null</span>)
{
XmlWriterSettings xwSettings = <span class="kwrd">new</span> XmlWriterSettings();
<span class="kwrd">if</span> (indentElements)
{
xwSettings.NewLineChars = Environment.NewLine;
xwSettings.Indent = <span class="kwrd">true</span>;
xwSettings.NewLineOnAttributes = <span class="kwrd">true</span>;
}
xwSettings.OmitXmlDeclaration = omitXmlDeclaration;
xwSettings.Encoding = System.Text.Encoding.UTF8;
System.IO.MemoryStream memStream = <span class="kwrd">new</span> System.IO.MemoryStream();
<span class="kwrd">using</span> (XmlWriter writer = XmlWriter.Create(memStream, xwSettings))
{
XmlSerializer xmlSer = GetSerializer<T>(isObjPropAsElement, rootElementName, extraTypes);
XmlSerializerNamespaces ns = <span class="kwrd">new</span> XmlSerializerNamespaces();
ns.Add(<span class="str">""</span>, <span class="str">""</span>);
xmlSer.Serialize(writer, obj, ns);
}
val = <span class="kwrd">new</span> System.Text.UTF8Encoding().GetString(memStream.ToArray());
}
<span class="kwrd">return</span> val;
}
<span class="kwrd">public</span> <span class="kwrd">static</span> T DeserializeXML<T>(<span class="kwrd">string</span> str, <span class="kwrd">bool</span> isObjPropAsElement, <span class="kwrd">string</span> rootElementName, Type[] extraTypes)
{
XmlSerializer xmlSer = GetSerializer<T>(isObjPropAsElement, rootElementName, extraTypes);
System.Text.UTF8Encoding encoding = <span class="kwrd">new</span> System.Text.UTF8Encoding();
<span class="kwrd">byte</span>[] bytes = encoding.GetBytes(str);
System.IO.MemoryStream memStream = <span class="kwrd">new</span> System.IO.MemoryStream(bytes);
Object obj = xmlSer.Deserialize(memStream);
memStream.Dispose();
<span class="kwrd">return</span> (T)Convert.ChangeType(obj, <span class="kwrd">typeof</span>(T));
}
<span class="kwrd">private</span> <span class="kwrd">static</span> XmlSerializer GetSerializer<T>(<span class="kwrd">bool</span> isObjPropAsElement, <span class="kwrd">string</span> rootElementName, Type[] extraTypes)
{
<span class="kwrd">if</span> (extraTypes == <span class="kwrd">null</span>) extraTypes = <span class="kwrd">new</span> Type[] { };
XmlAttributeOverrides overrides = <span class="kwrd">null</span>;
<span class="kwrd">if</span> (!isObjPropAsElement)
{
overrides = <span class="kwrd">new</span> XmlAttributeOverrides();
Type type = <span class="kwrd">typeof</span>(T);
<span class="kwrd">if</span> (type.IsGenericType && type.Name.Equals(<span class="kwrd">typeof</span>(List<>).Name))
{
type = type.GetGenericArguments()[0];
}
System.Reflection.PropertyInfo[] props = type.GetProperties();
<span class="kwrd">foreach</span> (System.Reflection.PropertyInfo prop <span class="kwrd">in</span> props)
{
XmlAttributes attrs = <span class="kwrd">new</span> XmlAttributes();
attrs.XmlAttribute = <span class="kwrd">new</span> XmlAttributeAttribute();
overrides.Add(type, prop.Name, attrs);
}
}
XmlRootAttribute xmlRootAtt = <span class="kwrd">new</span> XmlRootAttribute();
xmlRootAtt.ElementName = rootElementName;
xmlRootAtt.Namespace = <span class="str">""</span>;
XmlSerializer xmlSer = <span class="kwrd">new</span> XmlSerializer(<span class="kwrd">typeof</span>(T), overrides, extraTypes, xmlRootAtt, <span class="str">""</span>);
<span class="kwrd">return</span> xmlSer;
}
}</pre>
<br/>
To prepare DateTime on .Net side before serializing to XML so that it can be parsed on SQL Server side using XQuery, we can use this function.
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">private</span> DateTime PrepareDateTimeForSerialization(DateTime d)
{
<span class="kwrd">return</span> <span class="kwrd">new</span> DateTime(d.Ticks / 10000 * 10000, DateTimeKind.Utc);
}
</pre>
<br/>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-55172621521620786412011-03-11T08:07:00.007+11:002011-04-12T01:43:38.484+10:00SQL Server Service Broker Sample<a name='more'></a>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">CREATE</span> <span class="kwrd">DATABASE</span> GM
-------------------------------------------------<span class="rem">--</span>
<span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> [dbo].[GMBulkOperationLog](
[FromSerialNo] [<span class="kwrd">varchar</span>](20) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,
[ToSerialNo] [<span class="kwrd">varchar</span>](20) <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,
[Amount] [<span class="kwrd">int</span>] <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,
[<span class="kwrd">Action</span>] [<span class="kwrd">int</span>] <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>,
[Status] [tinyint] <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>
) <span class="kwrd">ON</span> [<span class="kwrd">PRIMARY</span>]
------------------------------------------------------<span class="rem">--</span>
<span class="kwrd">CREATE</span> <span class="kwrd">PROCEDURE</span> [dbo].[GM_SB_InitGMBulk]
(
@<span class="kwrd">Data</span> XML
)
<span class="kwrd">AS</span>
<span class="kwrd">BEGIN</span>
<span class="kwrd">DECLARE</span> @Handle UNIQUEIDENTIFIER;
<span class="kwrd">BEGIN</span> DIALOG CONVERSATION @Handle
<span class="kwrd">FROM</span> SERVICE GMBulkInitService
<span class="kwrd">TO</span> SERVICE <span class="str">'GMBulkTargetService'</span>
<span class="kwrd">ON</span> CONTRACT GMBulkContract
<span class="kwrd">WITH</span> ENCRYPTION = <span class="kwrd">OFF</span>;
SEND <span class="kwrd">ON</span> CONVERSATION @Handle
MESSAGE TYPE [GMBulkMsgType](@<span class="kwrd">Data</span>);
<span class="kwrd">END</span>
---------------------------------------------------<span class="rem">--</span>
<span class="kwrd">CREATE</span> <span class="kwrd">PROCEDURE</span> [dbo].[GM_SB_ProcessInternalGMBulk]
<span class="kwrd">AS</span>
<span class="kwrd">BEGIN</span>
<span class="kwrd">SET</span> NOCOUNT <span class="kwrd">ON</span>;
<span class="kwrd">DECLARE</span> @Handle UNIQUEIDENTIFIER;
<span class="kwrd">DECLARE</span> @MessageType SYSNAME;
<span class="kwrd">DECLARE</span> @Message XML
<span class="kwrd">DECLARE</span> @MaxCounter <span class="kwrd">INT</span>
<span class="kwrd">DECLARE</span> @Counter <span class="kwrd">INT</span>
<span class="kwrd">DECLARE</span> @<span class="kwrd">From</span> <span class="kwrd">VARCHAR</span>(20)
<span class="kwrd">DECLARE</span> @<span class="kwrd">To</span> <span class="kwrd">VARCHAR</span>(20)
<span class="kwrd">DECLARE</span> @<span class="kwrd">Action</span> <span class="kwrd">INT</span>
<span class="kwrd">DECLARE</span> @Amount <span class="kwrd">INT</span>;
RECEIVE <span class="kwrd">TOP</span> (1)
@Handle = conversation_handle,
@MessageType = message_type_name,
@Message = message_body
<span class="kwrd">FROM</span> GMBulkProcessQueue;
<span class="kwrd">IF</span>(@Handle <span class="kwrd">IS</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span> <span class="kwrd">AND</span> @Message <span class="kwrd">IS</span> <span class="kwrd">NOT</span> <span class="kwrd">NULL</span>)
<span class="kwrd">BEGIN</span>
<span class="kwrd">END</span> CONVERSATION @Handle
<span class="kwrd">DECLARE</span> @TmpTbl <span class="kwrd">TABLE</span>
(
ID <span class="kwrd">INT</span> <span class="kwrd">IDENTITY</span>(1,1),
FromSerialNo <span class="kwrd">VARCHAR</span>(20),
ToSerialNo <span class="kwrd">VARCHAR</span>(20)
)
<span class="kwrd">INSERT</span> <span class="kwrd">INTO</span> @TmpTbl(FromSerialNo,ToSerialNo)
<span class="kwrd">SELECT</span> T.Item.<span class="kwrd">value</span>(<span class="str">'@from'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> FromSerialNo,
T.Item.<span class="kwrd">value</span>(<span class="str">'@to'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> ToSerialNo
<span class="kwrd">FROM</span> @Message.nodes(<span class="str">'/data[1]/ranges[1]/sn'</span>) <span class="kwrd">AS</span> T(Item)
<span class="kwrd">SELECT</span> @Amount = <span class="kwrd">CAST</span>(<span class="kwrd">CAST</span>(@Message.query(<span class="str">'/data/amount/text()'</span>) <span class="kwrd">AS</span> NVARCHAR(<span class="kwrd">MAX</span>)) <span class="kwrd">AS</span> <span class="kwrd">INT</span>)
<span class="kwrd">SELECT</span> @<span class="kwrd">Action</span> = <span class="kwrd">CAST</span>(<span class="kwrd">CAST</span>(@Message.query(<span class="str">'/data/action/text()'</span>) <span class="kwrd">AS</span> NVARCHAR(<span class="kwrd">MAX</span>)) <span class="kwrd">AS</span> <span class="kwrd">INT</span>)
<span class="kwrd">SELECT</span> @MaxCounter = <span class="kwrd">MAX</span>(ID) <span class="kwrd">FROM</span> @TmpTbl
<span class="kwrd">SET</span> @Counter = 1
<span class="kwrd">WHILE</span>( @Counter <= @MaxCounter)
<span class="kwrd">BEGIN</span>
<span class="kwrd">SELECT</span> @<span class="kwrd">From</span> = FromSerialNO, @<span class="kwrd">To</span> = ToSerialNo
<span class="kwrd">FROM</span> @TmpTbl
<span class="kwrd">WHERE</span> ID = @Counter
<span class="kwrd">INSERT</span> <span class="kwrd">INTO</span> GMBulkOperationLog(FromSerialNo,ToSerialNo, Amount, [<span class="kwrd">Action</span>], Status)
<span class="kwrd">VALUES</span>(@<span class="kwrd">From</span>,@<span class="kwrd">To</span>,@Amount,@<span class="kwrd">Action</span>, 0);
-------------------------------------<span class="rem">--</span>
--processing
-------------------------------------<span class="rem">--</span>
<span class="kwrd">UPDATE</span> GMBulkOperationLog
<span class="kwrd">SET</span> Status = 1
<span class="kwrd">WHERE</span> FromSerialNo = @<span class="kwrd">From</span> <span class="kwrd">AND</span> ToSerialNo = @<span class="kwrd">To</span>
<span class="kwrd">SET</span> @Counter = @Counter + 1
<span class="kwrd">END</span>
<span class="kwrd">END</span>
<span class="kwrd">END</span>
--------------------------------------------------------------<span class="rem">--</span>
<span class="kwrd">CREATE</span> <span class="kwrd">PROCEDURE</span> [dbo].[GM_SB_CloseInitConversation]
<span class="kwrd">AS</span>
<span class="kwrd">BEGIN</span>
<span class="kwrd">DECLARE</span> @Handle UNIQUEIDENTIFIER;
<span class="kwrd">DECLARE</span> @MessageType SYSNAME;
<span class="kwrd">DECLARE</span> @Message XML;
<span class="kwrd">WAITFOR</span> (
RECEIVE <span class="kwrd">TOP</span> (1)
@Handle = CONVERSATION_HANDLE,
@MessageType = message_type_name,
@Message = message_body
<span class="kwrd">FROM</span> GMBulkQueue
), TIMEOUT 30000
<span class="kwrd">IF</span> (@@<span class="kwrd">ROWCOUNT</span> > 0)
<span class="kwrd">BEGIN</span>
<span class="kwrd">IF</span> @MessageType = N<span class="str">'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'</span>
<span class="kwrd">BEGIN</span>
<span class="kwrd">END</span> CONVERSATION @Handle;
<span class="kwrd">END</span>
<span class="kwrd">END</span>
<span class="kwrd">END</span>
-----------------------------------------------------------------<span class="rem">--</span>
<span class="kwrd">ALTER</span> <span class="kwrd">DATABASE</span> GM <span class="kwrd">SET</span> ENABLE_BROKER
<span class="kwrd">CREATE</span> MESSAGE TYPE GMBulkMsgType VALIDATION = <span class="kwrd">NONE</span>
<span class="kwrd">CREATE</span> CONTRACT [GMBulkContract] ([GMBulkMsgType] SENT <span class="kwrd">BY</span> INITIATOR)
<span class="kwrd">CREATE</span> QUEUE [GMBulkProcessQueue]
<span class="kwrd">CREATE</span> SERVICE [GMBulkTargetService] <span class="kwrd">ON</span> QUEUE [GMBulkProcessQueue]([GMBulkContract])
<span class="kwrd">CREATE</span> QUEUE [GMBulkQueue]
<span class="kwrd">CREATE</span> SERVICE [GMBulkInitService] <span class="kwrd">ON</span> QUEUE [GMBulkQueue]
<span class="kwrd">ALTER</span> QUEUE [GMBulkQueue]
<span class="kwrd">WITH</span> ACTIVATION
(STATUS = <span class="kwrd">ON</span>,
MAX_QUEUE_READERS = 1,
PROCEDURE_NAME = GM_SB_CloseInitConversation,
<span class="kwrd">EXECUTE</span> <span class="kwrd">AS</span> OWNER)
<span class="kwrd">ALTER</span> QUEUE [GMBulkProcessQueue]
<span class="kwrd">WITH</span> ACTIVATION
(STATUS = <span class="kwrd">ON</span>,
MAX_QUEUE_READERS = 1,
PROCEDURE_NAME = GM_SB_ProcessInternalGMBulk,
<span class="kwrd">EXECUTE</span> <span class="kwrd">AS</span> OWNER)
-------------------------------------------------------<span class="rem">--</span>
<span class="kwrd">DECLARE</span> @d XML
<span class="kwrd">SET</span> @d = N<span class="str">'
<data>
<ranges>
<sn from="11111" to="22222" />
<sn from="44444" to="55555" />
</ranges>
<amount>200</amount>
<action>2</action>
</data>'</span>
<span class="kwrd">EXEC</span> dbo.GM_SB_InitGMBulk @<span class="kwrd">Data</span> = @d
<span class="kwrd">SELECT</span> * <span class="kwrd">FROM</span> GMBulkOperationLog
<span class="kwrd">TRUNCATE</span> <span class="kwrd">TABLE</span> GMBulkOperationLog
--<span class="kwrd">If</span> <span class="kwrd">database</span> has active connections,
--we can <span class="kwrd">not</span> enable service broker,
--<span class="kwrd">to</span> do that <span class="kwrd">database</span> needs exclusive lock,
--<span class="kwrd">To</span> <span class="kwrd">kill</span> <span class="kwrd">all</span> sessions, we can run this:
<span class="kwrd">ALTER</span> <span class="kwrd">DATABASE</span> GM <span class="kwrd">SET</span> SINGLE_USER <span class="kwrd">WITH</span> <span class="kwrd">ROLLBACK</span> <span class="kwrd">IMMEDIATE</span>
<span class="kwrd">ALTER</span> <span class="kwrd">DATABASE</span> GM <span class="kwrd">SET</span> ENABLE_BROKER
<span class="kwrd">ALTER</span> <span class="kwrd">DATABASE</span> GM <span class="kwrd">SET</span> MULTI_USER</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1tag:blogger.com,1999:blog-1701603541105674369.post-1622200302260164652011-03-05T08:09:00.002+11:002011-03-05T08:14:39.136+11:00CRUD using XML and XQuerywe have a table TestA with 2 columns (ID,Name) and ID is an identity column.
<a name='more'></a>
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
--<span class="kwrd">INSERT</span>--------------------------------------------<span class="rem">--</span>
<span class="kwrd">Declare</span> @myXML XML
<span class="kwrd">SET</span> @myXML = N<span class="str">'
<rows>
<row Name="33333" />
<row Name="444444" />
<row Name="555555" />
</rows>'</span>
<span class="kwrd">DECLARE</span> @NewIdTable <span class="kwrd">TABLE</span> (ID <span class="kwrd">INT</span>)
<span class="kwrd">INSERT</span> <span class="kwrd">INTO</span> TestA ([Name])
<span class="kwrd">OUTPUT</span> INSERTED.ID <span class="kwrd">INTO</span> @NewIdTable
<span class="kwrd">SELECT</span> T.Item.<span class="kwrd">value</span>(<span class="str">'@Name'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> Name
<span class="kwrd">FROM</span> @MyXML.nodes(<span class="str">'/rows[1]/row'</span>) <span class="kwrd">AS</span> T(Item)
--<span class="kwrd">UPDATE</span>----------------------------------------------<span class="rem">--</span>
<span class="kwrd">Declare</span> @myXML XML
<span class="kwrd">SET</span> @myXML = N<span class="str">'
<rows>
<row ID="3" Name="33333" />
<row ID="4" Name="444444" />
<row ID="5" Name="555555" />
</rows>'</span>
<span class="kwrd">UPDATE</span> TestA
<span class="kwrd">SET</span> [Name] = b.[Name]
<span class="kwrd">FROM</span> TestA a <span class="kwrd">INNER</span> <span class="kwrd">JOIN</span>
(<span class="kwrd">SELECT</span> T.Item.<span class="kwrd">value</span>(<span class="str">'@ID'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> ID,
T.Item.<span class="kwrd">value</span>(<span class="str">'@Name'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> Name
<span class="kwrd">FROM</span> @MyXML.nodes(<span class="str">'/rows[1]/row'</span>) <span class="kwrd">AS</span> T(Item)) <span class="kwrd">AS</span> b
<span class="kwrd">ON</span> a.ID = b.ID
--<span class="kwrd">DELETE</span>-------------------------------------------<span class="rem">--</span>
<span class="kwrd">Declare</span> @myXML XML
<span class="kwrd">SET</span> @myXML = N<span class="str">'
<rows>
<row ID="3" Name="33333" />
<row ID="4" Name="444444" />
<row ID="5" Name="555555" />
</rows>'</span>
<span class="kwrd">DELETE</span> A
<span class="kwrd">FROM</span> TestA A <span class="kwrd">INNER</span> <span class="kwrd">JOIN</span>
(<span class="kwrd">SELECT</span> T.Item.<span class="kwrd">value</span>(<span class="str">'@ID'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> ID,
T.Item.<span class="kwrd">value</span>(<span class="str">'@Name'</span>,<span class="str">'varchar(20)'</span>) <span class="kwrd">AS</span> Name
<span class="kwrd">FROM</span> @MyXML.nodes(<span class="str">'/rows[1]/row'</span>) <span class="kwrd">AS</span> T(Item)) <span class="kwrd">AS</span> B
<span class="kwrd">ON</span> A.ID = B.ID
</pre>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-90009321714175565612011-03-02T06:22:00.003+11:002011-03-02T06:39:45.223+11:00Case statement in LINQ<a name='more'></a>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
(from c <span class="kwrd">in</span> Contents
orderby c.ContentId descending
select <span class="kwrd">new</span> { ContentId = c.ContentId,
RandomKey = (
c.ContentRandomKey < 1000 ? <span class="str">"less than 1000"</span> :
c.ContentRandomKey < 1000 ? <span class="str">"greater than 1000"</span> : <span class="str">"Unknown"</span>
)
}
).Take(100)</pre>
<br/>
This is the generated SQL Statement:
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">SELECT</span> <span class="kwrd">TOP</span> (100) [t1].[ContentId], [t1].[<span class="kwrd">value</span>] <span class="kwrd">AS</span> [RandomKey]
<span class="kwrd">FROM</span> (
<span class="kwrd">SELECT</span> [t0].[ContentId],
(<span class="kwrd">CASE</span>
<span class="kwrd">WHEN</span> [t0].[ContentRandomKey] < 1000 <span class="kwrd">THEN</span> <span class="str">'less than 1000'</span>
<span class="kwrd">WHEN</span> [t0].[ContentRandomKey] < 1000 <span class="kwrd">THEN</span> <span class="str">'greater than 1000'</span>
<span class="kwrd">ELSE</span> <span class="str">'Unknown'</span>
<span class="kwrd">END</span>) <span class="kwrd">AS</span> [<span class="kwrd">value</span>]
<span class="kwrd">FROM</span> [Content] <span class="kwrd">AS</span> [t0]
) <span class="kwrd">AS</span> [t1]
<span class="kwrd">ORDER</span> <span class="kwrd">BY</span> [t1].[ContentId] DESC</pre>
<br/>
<b>Attention:</b>
<br/>
I think it is always better to use searched case expression. ( CASE WHEN ....)
<br/>
CASE <br/>
WHEN x>0 THEN 1 <br/>
WHEN x<0 -1 <br/>
WHEN x IS NULL THEN -2 <br/>
ELSE 0 <br/>
END<br/>
<br/>
Because if we use simple case, then we have problem with NULL.
<br/>
CASE x<br/>
WHEN NULL THEN -1 <br/>
WHEN 1 THEN 1 <br/>
WHEN 2 THEN 2 <br/>
ELSE 3 END<br/>
<br/>
(Wrong result, x = NULL does not work, we should use IS NULL)Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com0tag:blogger.com,1999:blog-1701603541105674369.post-18417315958428331402011-01-29T07:16:00.014+11:002011-06-23T02:30:54.282+10:00Jquery DataTables in asp.net with CRUD<a name='more'></a>
I am going to show how we can use jquery datatables in asp.net webforms.
<br/>
<a href='http://www.datatables.net' target='blank'>Jquery DataTables</a>
<br/>
<a href='http://www.sprymedia.co.uk/article/DataTables' target='blank'>More details</a>
<br/>
First we need to download the required files for jquery datatables form their website.
<br/>
I have 2 cases:<br/>
<b>Case1:</b><br/>
when bServerSide = false and jquery datatable gets the whole data<br/>
in this case, I need to fetch the whole data and populate the HTML table with proper format (THEAD, TBODY, ...).
<br/>
<br/>
Person.cs
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">public</span> <span class="kwrd">class</span> Person
{
<span class="kwrd">public</span> <span class="kwrd">int</span> Id { get; set; }
<span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }
<span class="kwrd">public</span> <span class="kwrd">static</span> ICollection<Person> GetPersons()
{
IList<Person> list = <span class="kwrd">new</span> List<Person>();
<span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i < 63; i++)
{
list.Add(<span class="kwrd">new</span> Person() { Id = i, Name = <span class="str">"name"</span> + i });
}
<span class="kwrd">return</span> list;
}
}
</pre>
<br/>
test1.aspx
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="asp"><%@ Page Language="C#" AutoEventWireup="true"
CodeFile="test1.aspx.cs" Inherits="jqueryDataTable_test1" %></span>
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span> <span class="attr">PUBLIC</span> <span class="kwrd">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span>
<span class="kwrd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">link</span> <span class="attr">rel</span><span class="kwrd">="stylesheet"</span> <span class="attr">href</span><span class="kwrd">="media/css/demo_table.css"</span><span class="attr">type</span><span class="kwrd">="text/css"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span> <span class="attr">src</span><span class="kwrd">="media/js/jquery.js"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script type=<span class="str">"text/javascript"</span> src=<span class="str">"media/js/jquery.dataTables.js"</span>></script>
<script language=<span class="str">"javascript"</span> type=<span class="str">"text/javascript"</span>>
$(document).ready(<span class="kwrd">function</span> () {
$(<span class="str">'#tbl'</span>).dataTable({
<span class="str">"sScrollY"</span>: <span class="str">"150px"</span>,
<span class="rem">//'sPaginationType': 'full_numbers',</span>
<span class="rem">//'iDisplayLength': 5,</span>
<span class="str">"bPaginate"</span>: <span class="kwrd">true</span>,
<span class="str">"bProcessing"</span>: <span class="kwrd">true</span>,
<span class="str">"bServerSide"</span>: <span class="kwrd">false</span>
});
});
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">form</span> <span class="attr">id</span><span class="kwrd">="form1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">style</span><span class="kwrd">="width:500px"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">asp:Repeater</span> <span class="attr">ID</span><span class="kwrd">="repeater"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">HeaderTemplate</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">id</span><span class="kwrd">="tbl"</span> <span class="attr">cellpadding</span><span class="kwrd">="1"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span>
<span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">class</span><span class="kwrd">="display"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>Id<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">HeaderTemplate</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">ItemTemplate</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span><span class="asp"><%</span># Eval(<span class="str">"Id"</span>) <span class="asp">%></span><span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span><span class="asp"><%</span># Eval(<span class="str">"Name"</span>) <span class="asp">%></span><span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">ItemTemplate</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">FooterTemplate</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">FooterTemplate</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">asp:Repeater</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">form</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span>
</pre>
<br/>
test1.aspx.cs
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> jqueryDataTable_test1 : System.Web.UI.Page
{
<span class="kwrd">protected</span> <span class="kwrd">void</span> Page_Load(<span class="kwrd">object</span> sender, EventArgs e)
{
repeater.DataSource = Person.GetPersons();
repeater.DataBind();
}
}</pre>
<br/>
<br/>
<b>Case2:</b><br/>
when bServerSide = true and jquery datatable gets the data from server side on demand and it has insert and update and delete features. and I am using $.ajax to call page methods and can be easily replaced with calling asmx or wcf methods or ashx handler.
<br/>
test2.aspx
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="asp"><%@ Page Language="C#" AutoEventWireup="true"
CodeFile="test2.aspx.cs" Inherits="jqueryDataTable_test2" %></span>
<span class="kwrd"><!</span><span class="html">DOCTYPE</span> <span class="attr">html</span> <span class="attr">PUBLIC</span> <span class="kwrd">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span>
<span class="kwrd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">head</span> <span class="attr">id</span><span class="kwrd">="Head1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">link</span> <span class="attr">rel</span><span class="kwrd">="stylesheet"</span> <span class="attr">href</span><span class="kwrd">="media/css/demo_table.css"</span><span class="attr">type</span><span class="kwrd">="text/css"</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span> <span class="attr">src</span><span class="kwrd">="media/js/jquery.js"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span>
<script type=<span class="str">"text/javascript"</span> src=<span class="str">"media/js/jquery.dataTables.js"</span>></script>
<script type=<span class="str">"text/javascript"</span> src=<span class="str">"media/js/json2.js"</span>></script>
<script type=<span class="str">"text/javascript"</span>>
<span class="rem">//http: //www.sprymedia.co.uk/article/DataTables</span>
<span class="rem">//http://www.datatables.net</span>
<span class="kwrd">var</span> oTable;
<span class="kwrd">var</span> tableId = <span class="str">'tbl'</span>;
<span class="kwrd">var</span> ws_GetData = <span class="str">'test2.aspx/GetPersonData'</span>;
<span class="kwrd">var</span> ws_DeleteData = <span class="str">'test2.aspx/DeletePerson'</span>;
<span class="kwrd">var</span> ws_UpdateData = <span class="str">'test2.aspx/UpdatePerson'</span>;
<span class="kwrd">var</span> ws_AddData = <span class="str">'test2.aspx/AddPerson'</span>;
<span class="kwrd">var</span> isDeleteEnbaled = <span class="kwrd">true</span>;
<span class="kwrd">var</span> isUpdateEnabled = <span class="kwrd">true</span>;
<span class="kwrd">var</span> isAddEnabled = <span class="kwrd">true</span>;
<span class="kwrd">var</span> isShowGrid = <%= isShowGrid %>;
$(document).ready(<span class="kwrd">function</span> () {
<span class="kwrd">if</span>(isShowGrid == <span class="str">"0"</span>)
{
$(<span class="str">'#'</span> + tableId).css(<span class="str">"display"</span>,<span class="str">"none"</span>);
<span class="kwrd">return</span>;
}
<span class="kwrd">if</span>(isAddEnabled)
{
$(<span class="str">'#'</span> + tableId + <span class="str">'_add'</span>).css(<span class="str">"display"</span>,<span class="str">"block"</span>);
$(<span class="str">'#'</span> + tableId + <span class="str">'_add_btnAdd'</span>).click(<span class="kwrd">function</span>(){ AddMe(); });
}
oTable = $(<span class="str">'#'</span> + tableId).dataTable({
<span class="rem">//'sPaginationType': 'full_numbers',</span>
<span class="str">"sScrollY"</span>: <span class="str">"250px"</span>,
<span class="str">'bPaginate'</span>: <span class="kwrd">true</span>,
<span class="rem">//'iDisplayLength': 10,</span>
<span class="str">'bProcessing'</span>: <span class="kwrd">true</span>,
<span class="str">'bFilter'</span>: <span class="kwrd">false</span>,
<span class="str">'bServerSide'</span>: <span class="kwrd">true</span>,
<span class="str">"aoColumns"</span>: [<span class="kwrd">null</span>, <span class="kwrd">null</span>, { <span class="str">"bSortable"</span>: <span class="kwrd">false</span> }, { <span class="str">"bSortable"</span>: <span class="kwrd">false</span>}],
<span class="str">'sAjaxSource'</span>: ws_GetData,
<span class="str">"fnServerData"</span>: <span class="kwrd">function</span> (sSource, aoData, fnCallback) { GrabData(sSource, aoData, fnCallback); }
});
$(<span class="str">'#'</span> + tableId + <span class="str">' tbody tr'</span>).live(<span class="str">'click'</span>, <span class="kwrd">function</span> () {
$(oTable.fnSettings().aoData).each(<span class="kwrd">function</span> () { $(<span class="kwrd">this</span>.nTr).removeClass(<span class="str">'row_selected'</span>); });
$(<span class="kwrd">this</span>).addClass(<span class="str">'row_selected'</span>);
<span class="rem">//var aPos = oTable.fnGetPosition(this);</span>
<span class="rem">//var aData = oTable.fnGetData(this);</span>
<span class="rem">//iId = aData[0];</span>
});
});
<span class="rem">//-------------------------------------------------</span>
<span class="kwrd">function</span> GrabData(sSource, aoData, fnCallback) {
<span class="rem">//aoData.push({ "name": "more_data", "value": "my_value" });</span>
$.ajax({
type: <span class="str">"GET"</span>,
url: sSource,
contentType: <span class="str">"application/json; charset=utf-8"</span>,
dataType: <span class="str">"json"</span>,
data: aoData,
success: <span class="kwrd">function</span> (result) {
<span class="rem">//var json = eval('(' + result.d + ')');</span>
<span class="kwrd">var</span> myObject = JSON.parse(result.d);
<span class="kwrd">if</span> (isUpdateEnabled) {
<span class="kwrd">for</span> (<span class="kwrd">var</span> i = 0; i < myObject.aaData.length; i++) {
<span class="kwrd">var</span> str2 = <span class="str">"<input id='"</span> + tableId + <span class="str">"_update_"</span> + myObject.aaData[i][0] + <span class="str">"' type='button' value='update' onclick='UpdatePrepare("</span> + JSON.stringify(myObject.aaData[i]) + <span class="str">");' />"</span>;
myObject.aaData[i].push(str2);
}
}
<span class="kwrd">if</span> (isDeleteEnbaled) {
<span class="kwrd">for</span> (<span class="kwrd">var</span> i = 0; i < myObject.aaData.length; i++) {
<span class="kwrd">var</span> str1 = <span class="str">"<input id='"</span> + tableId + <span class="str">"_delete_"</span> + myObject.aaData[i][0] + <span class="str">"' type='button' value='delete' onclick='DeleteMe("</span> + myObject.aaData[i][0] + <span class="str">");' />"</span>;
myObject.aaData[i].push(str1);
}
}
fnCallback(myObject);
},
error: <span class="kwrd">function</span> (errMsg) {
alert(errMsg);
}
});
}
<span class="rem">//--------------------------------------------------------------------------</span>
<span class="kwrd">function</span> DeleteMe(IdToBeDeleted)
{
<span class="kwrd">if</span> (window.confirm(<span class="str">'Are you sure to delete this row?'</span>) == <span class="kwrd">false</span>) <span class="kwrd">return</span>;
<span class="rem">//*************************************************</span>
<span class="kwrd">var</span> parameters = <span class="str">"{'id':'"</span> + IdToBeDeleted + <span class="str">"'}"</span>;
<span class="rem">//*************************************************</span>
$.ajax({
type: <span class="str">"POST"</span>,
url: ws_DeleteData,
data: parameters,
contentType: <span class="str">"application/json; charset=utf-8"</span>,
dataType: <span class="str">"json"</span>,
success: <span class="kwrd">function</span> (msg) {
alert(msg.d);
oTable.fnDraw();
},
error: <span class="kwrd">function</span> (e) {
alert(<span class="str">'Failure Deletion'</span>);
}
});
}
<span class="rem">//---------------------------------------------------------------------------</span>
<span class="kwrd">function</span> UpdatePrepare(data)
{
$(<span class="str">'#'</span> + tableId + <span class="str">'_update'</span>).css(<span class="str">"display"</span>,<span class="str">"block"</span>);
<span class="rem">//**************************************************</span>
$(<span class="str">'#'</span> + tableId + <span class="str">'_update_txtId'</span>).val(data[0]);
$(<span class="str">'#'</span> + tableId + <span class="str">'_update_txtName'</span>).val(data[1]);
<span class="rem">//***************************************************</span>
$(<span class="str">'#'</span> + tableId + <span class="str">'_update_btnUpdate'</span>).unbind(<span class="str">"click"</span>);
$(<span class="str">'#'</span> + tableId + <span class="str">'_update_btnUpdate'</span>).click(<span class="kwrd">function</span>(){ UpdateMe(); });
$(<span class="str">'#'</span> + tableId + <span class="str">'_update_btnCancel'</span>).click(<span class="kwrd">function</span>(){
$(<span class="str">'#'</span> + tableId + <span class="str">'_update'</span>).css(<span class="str">"display"</span>,<span class="str">"none"</span>);
});
}
<span class="kwrd">function</span> UpdateMe() {
<span class="kwrd">if</span> (window.confirm(<span class="str">'Are you sure to update this?'</span>) == <span class="kwrd">false</span>) <span class="kwrd">return</span>;
<span class="rem">//********************************************************</span>
<span class="kwrd">var</span> person = <span class="kwrd">new</span> Object();
person.Id = $(<span class="str">'#'</span> + tableId + <span class="str">'_update_txtId'</span>).val();
person.name = $(<span class="str">'#'</span> + tableId + <span class="str">'_update_txtName'</span>).val();
<span class="rem">//var parameters = "{'id':'" + id + "', 'name':'" + name + "'}";</span>
<span class="kwrd">var</span> DTO = { <span class="str">'person'</span> : person };
<span class="kwrd">var</span> parameters = JSON.stringify(DTO);
<span class="rem">//******************************************************</span>
$.ajax({
type: <span class="str">"POST"</span>,
url: ws_UpdateData,
data: parameters,
contentType: <span class="str">"application/json; charset=utf-8"</span>,
dataType: <span class="str">"json"</span>,
success: <span class="kwrd">function</span> (msg) {
alert(msg.d);
$(<span class="str">'#'</span> + tableId + <span class="str">'_update'</span>).css(<span class="str">"display"</span>,<span class="str">"none"</span>);
oTable.fnDraw();
},
error: <span class="kwrd">function</span> (e) {
alert(<span class="str">'Failure Update'</span>);
}
});
}
<span class="rem">//------------------------------------------------------------------------------</span>
<span class="kwrd">function</span> AddMe() {
<span class="kwrd">if</span> (window.confirm(<span class="str">'Are you sure to add this?'</span>) == <span class="kwrd">false</span>) <span class="kwrd">return</span>;
<span class="rem">//************************************************************</span>
<span class="kwrd">var</span> name = $(<span class="str">'#'</span> + tableId + <span class="str">'_add_txtName'</span>).val();
<span class="kwrd">var</span> parameters = <span class="str">"{'id':'0', 'name':'"</span> + name + <span class="str">"'}"</span>;
<span class="rem">//***********************************************************</span>
$.ajax({
type: <span class="str">"POST"</span>,
url: ws_AddData,
data: parameters,
contentType: <span class="str">"application/json; charset=utf-8"</span>,
dataType: <span class="str">"json"</span>,
success: <span class="kwrd">function</span> (msg) {
alert(msg.d);
oTable.fnDraw();
},
error: <span class="kwrd">function</span> (e) {
alert(<span class="str">'Failure Add'</span>);
}
});
}
<span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">form</span> <span class="attr">id</span><span class="kwrd">="form1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">div</span> <span class="attr">style</span><span class="kwrd">="width:500px"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">cellpadding</span><span class="kwrd">="2"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span> <span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">class</span><span class="kwrd">="display"</span> <span class="attr">id</span><span class="kwrd">="tbl_add"</span> <span class="attr">style</span><span class="kwrd">="width:250px;display:none"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="tbl_add_txtName"</span> <span class="attr">value</span><span class="kwrd">=""</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="tbl_add_btnAdd"</span> <span class="attr">value</span><span class="kwrd">="Add"</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">cellpadding</span><span class="kwrd">="2"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span> <span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">class</span><span class="kwrd">="display"</span> <span class="attr">id</span><span class="kwrd">="tbl"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>ID<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">th</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">th</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">thead</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span> <span class="attr">colspan</span><span class="kwrd">="2"</span> <span class="attr">class</span><span class="kwrd">="dataTables_empty"</span><span class="kwrd">></span>Loading data from server<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tbody</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">br</span> <span class="kwrd">/></span>
<span class="kwrd"><</span><span class="html">table</span> <span class="attr">cellpadding</span><span class="kwrd">="2"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span> <span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">class</span><span class="kwrd">="display"</span> <span class="attr">id</span><span class="kwrd">="tbl_update"</span> <span class="attr">style</span><span class="kwrd">="width:250px;display:none"</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Id<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="tbl_update_txtId"</span> <span class="attr">value</span><span class="kwrd">="0"</span>
<span class="attr">style</span><span class="kwrd">="border:solid 1px Black;width:100px;background-color:#D1D1D1"</span> <span class="attr">onfocus</span><span class="kwrd">="this.blur();"</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>Name<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="tbl_update_txtName"</span> <span class="attr">value</span><span class="kwrd">=""</span> <span class="kwrd">/></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span><span class="attr">&nbsp;</span><span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="tbl_update_btnUpdate"</span> <span class="attr">value</span><span class="kwrd">="Update"</span> <span class="kwrd">/></span><span class="attr">&nbsp;</span>
<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="tbl_update_btnCancel"</span> <span class="attr">value</span><span class="kwrd">="Cancel"</span> <span class="kwrd">/></span>
<span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">form</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span>
<span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span>
</pre>
<br/>
test2.aspx.cs
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">
<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Web;
<span class="kwrd">using</span> System.Web.UI;
<span class="kwrd">using</span> System.Web.UI.WebControls;
<span class="kwrd">using</span> System.Web.Services;
<span class="kwrd">using</span> System.Web.Script.Services;
[System.Web.Script.Services.ScriptService]
<span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> jqueryDataTable_test2 : System.Web.UI.Page
{
<span class="kwrd">protected</span> <span class="kwrd">string</span> isShowGrid = <span class="str">"1"</span>;
<span class="kwrd">protected</span> <span class="kwrd">void</span> Page_Load(<span class="kwrd">object</span> sender, EventArgs e)
{
}
[System.Web.Services.WebMethod()]
[ScriptMethod(UseHttpGet = <span class="kwrd">true</span>, ResponseFormat = ResponseFormat.Json)]
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> GetPersonData()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
context.Response.ContentType = <span class="str">"application/json"</span>;
<span class="rem">//--------------------------------------------------------</span>
<span class="rem">// These parameters are sent by the plugin</span>
var iDisplayLength = (context.Request[<span class="str">"iDisplayLength"</span>] != <span class="kwrd">null</span>) ? <span class="kwrd">int</span>.Parse(context.Request[<span class="str">"iDisplayLength"</span>]) : 0;
var iDisplayStart = (context.Request[<span class="str">"iDisplayStart"</span>] != <span class="kwrd">null</span>) ? <span class="kwrd">int</span>.Parse(context.Request[<span class="str">"iDisplayStart"</span>]) : 0;
var iSortCol = (context.Request[<span class="str">"iSortCol_0"</span>] != <span class="kwrd">null</span>) ? <span class="kwrd">int</span>.Parse(context.Request[<span class="str">"iSortCol_0"</span>]) : 0;
var iSortDir = context.Request[<span class="str">"sSortDir_0"</span>];
var echo = (context.Request[<span class="str">"sEcho"</span>] != <span class="kwrd">null</span>) ? <span class="kwrd">int</span>.Parse(context.Request[<span class="str">"sEcho"</span>]) : 0;
<span class="rem">//---------------------------------------------------------</span>
<span class="rem">//Fetch the data from a repository</span>
var persons = Person.GetPersons();
<span class="rem">//order function based on the iSortCol parameter</span>
Func<Person, <span class="kwrd">object</span>> order = p =>
{
<span class="kwrd">if</span> (iSortCol == 0)
{
<span class="kwrd">return</span> p.Id;
}
<span class="kwrd">return</span> p.Name;
};
<span class="rem">//order direction based on the iSortDir parameter</span>
<span class="kwrd">if</span> (<span class="str">"desc"</span> == iSortDir)
{
persons = persons.OrderByDescending(order).ToList<Person>();
}
<span class="kwrd">else</span>
{
persons = persons.OrderBy(order).ToList();
}
IEnumerable<Person> li = persons.Select(p => <span class="kwrd">new</span> Person() { Id = p.Id, Name = p.Name }).Skip(iDisplayStart).Take(iDisplayLength);
List<List<<span class="kwrd">string</span>>> aaList = <span class="kwrd">new</span> List<List<<span class="kwrd">string</span>>>();
<span class="kwrd">foreach</span> (Person p <span class="kwrd">in</span> li)
{
List<<span class="kwrd">string</span>> l = <span class="kwrd">new</span> List<<span class="kwrd">string</span>>();
l.Add(p.Id.ToString());
l.Add(p.Name);
aaList.Add(l);
}
<span class="rem">//--------------------------------------------------------</span>
<span class="rem">// make an anonymous object for JSON serialization</span>
var formatedList = <span class="kwrd">new</span>
{
sEcho = echo,
iTotalRecords = persons.Count(),
iTotalDisplayRecords = persons.Count(),
aaData = aaList
};
var serializer = <span class="kwrd">new</span> System.Web.Script.Serialization.JavaScriptSerializer();
var json = serializer.Serialize(formatedList);
<span class="kwrd">return</span> json;
}
[WebMethod]
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> DeletePerson(<span class="kwrd">string</span> id)
{
<span class="kwrd">return</span> <span class="str">"delete done successfully. "</span>;
}
[WebMethod]
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> AddPerson(<span class="kwrd">string</span> id ,<span class="kwrd">string</span> name)
{
<span class="kwrd">return</span> <span class="str">"add done successfully. "</span>;
}
[WebMethod]
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> UpdatePerson(<span class="kwrd">Person</span> person)
{
<span class="kwrd">return</span> <span class="str">"update done successfully. "</span>;
}
}
</pre>
Cheers!Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com10tag:blogger.com,1999:blog-1701603541105674369.post-1547438039823715682010-12-07T06:47:00.005+11:002010-12-08T02:49:01.791+11:00Gridview check all and post form data with jqueryI am going to show an example of doing some cool stuff using jquery and VS2010.
<a name='more'></a>
<br/>
I need these 2 files:<br/>
<a href="http://jquery.com" target="blank">jquery</a><br/>
<a href="http://www.json.org/json2.js" target="blank">http://www.json.org/json2.js</a>
<br/>
<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<div class="csharpcode">
<pre class="alt"><span class="asp"><%@ Page Language="C#" AutoEventWireup="true" </pre>
<pre>CodeFile="test.aspx.cs" Inherits="jquerytest_test" %></span></pre>
<pre class="alt"> </pre>
<pre> </pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span><span class="kwrd">></span></pre>
<pre><span class="kwrd"><</span><span class="html">head</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">title</span><span class="kwrd">></</span><span class="html">title</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="jquery-1.4.4.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">></</span><span class="html">script</span><span class="kwrd">></span></pre>
<pre class="alt"> <script src=<span class="str">"json2.js"</span> type=<span class="str">"text/javascript"</span>></script></pre>
<pre> <script type=<span class="str">"text/javascript"</span>></pre>
<pre class="alt"> </pre>
<pre> <span class="rem">//-------------------------------------------------------------------------</span></pre>
<pre class="alt"> $(document).ready(<span class="kwrd">function</span> () {</pre>
<pre> <span class="kwrd">var</span> gridId = <span class="str">'#<%=grid.ClientID%>'</span>;</pre>
<pre class="alt"> </pre>
<pre> ConfigureAllCheckBox(gridId);</pre>
<pre class="alt"> </pre>
<pre> $(gridId + <span class="str">" input[id*='chkThis']:checkbox"</span>).click(<span class="kwrd">function</span> () {</pre>
<pre class="alt"> UpdateFooter(gridId);</pre>
<pre> ConfigureAllCheckBox(gridId);</pre>
<pre class="alt"> });</pre>
<pre> </pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkAll']:checkbox"</span>).click(<span class="kwrd">function</span> () {</pre>
<pre> <span class="kwrd">if</span> ($(<span class="kwrd">this</span>).<span class="kwrd">is</span>(<span class="str">':checked'</span>)) </pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkThis']:checkbox"</span>).attr(<span class="str">'checked'</span>, <span class="kwrd">true</span>);</pre>
<pre> <span class="kwrd">else</span> </pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkThis']:checkbox"</span>).attr(<span class="str">'checked'</span>, <span class="kwrd">false</span>);</pre>
<pre> </pre>
<pre class="alt"> UpdateFooter(gridId);</pre>
<pre> });</pre>
<pre class="alt"> </pre>
<pre> });</pre>
<pre class="alt"> </pre>
<pre> <span class="kwrd">function</span> ConfigureAllCheckBox(gridId) {</pre>
<pre class="alt"> <span class="kwrd">var</span> totalCheckboxes = $(gridId + <span class="str">" input[id*='chkThis']:checkbox"</span>).length;</pre>
<pre> <span class="kwrd">var</span> checkedCheckboxes = $(gridId + <span class="str">" input[id*='chkThis']:checkbox:checked"</span>).length;</pre>
<pre class="alt"> </pre>
<pre> <span class="kwrd">if</span> (totalCheckboxes == checkedCheckboxes)</pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkAll']:checkbox"</span>).attr(<span class="str">'checked'</span>, <span class="kwrd">true</span>);</pre>
<pre> <span class="kwrd">else</span></pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkAll']:checkbox"</span>).attr(<span class="str">'checked'</span>, <span class="kwrd">false</span>);</pre>
<pre> </pre>
<pre class="alt"> }</pre>
<pre> </pre>
<pre class="alt"> <span class="kwrd">function</span> UpdateFooter(gridId) {</pre>
<pre> </pre>
<pre class="alt"> <span class="kwrd">var</span> totalId = <span class="str">'txtTotalAmount'</span>;</pre>
<pre> </pre>
<pre class="alt"> <span class="kwrd">var</span> total = 0;</pre>
<pre> </pre>
<pre class="alt"> $(gridId + <span class="str">" input[id*='chkThis']:checkbox:checked"</span>).each(<span class="kwrd">function</span> () {</pre>
<pre> total = total + parseFloat($(<span class="kwrd">this</span>).val());</pre>
<pre class="alt"> });</pre>
<pre> $(gridId + <span class="str">" input[id*="</span> + totalId + <span class="str">"]"</span>).val(total);</pre>
<pre class="alt"> }</pre>
<pre> <span class="rem">//-------------------------------------------------------------</span></pre>
<pre class="alt"> $(document).ready(<span class="kwrd">function</span> () {</pre>
<pre> $(<span class="str">"#btnSubmit1"</span>).click(sendData1);</pre>
<pre class="alt"> $(<span class="str">"#btnSubmit2"</span>).click(sendData2);</pre>
<pre> });</pre>
<pre class="alt"> </pre>
<pre> <span class="kwrd">function</span> sendData1() {</pre>
<pre class="alt"> </pre>
<pre> $(<span class="str">"#divResult"</span>).html(<span class="str">"Please wait..."</span>);</pre>
<pre class="alt"> </pre>
<pre> <span class="kwrd">var</span> arForm = $(<span class="str">"#form1"</span>).serializeArray();</pre>
<pre class="alt"> </pre>
<pre> $.ajax({ url: <span class="str">"test.aspx/SendData1"</span>,</pre>
<pre class="alt"> type: <span class="str">"POST"</span>,</pre>
<pre> contentType: <span class="str">"application/json"</span>,</pre>
<pre class="alt"> data: JSON.stringify({ formVars: arForm }),</pre>
<pre> dataType: <span class="str">"json"</span>,</pre>
<pre class="alt"> success: <span class="kwrd">function</span> (result) {</pre>
<pre> $(<span class="str">"#divResult"</span>).html(result.d);</pre>
<pre class="alt"> },</pre>
<pre> error: <span class="kwrd">function</span> (xhr, status) {</pre>
<pre class="alt"> alert(<span class="str">"An error occurred: "</span> + status);</pre>
<pre> }</pre>
<pre class="alt"> });</pre>
<pre> }</pre>
<pre class="alt"> <span class="kwrd">function</span> sendData2() {</pre>
<pre> </pre>
<pre class="alt"> $(<span class="str">"#divResult"</span>).html(<span class="str">"Please wait..."</span>);</pre>
<pre> </pre>
<pre class="alt"> <span class="kwrd">var</span> x = JSON.stringify({ name: <span class="str">"sam"</span>, city: <span class="str">"sydney"</span>, date: <span class="kwrd">new</span> Date() });</pre>
<pre> </pre>
<pre class="alt"> </pre>
<pre> $.ajax({ url: <span class="str">"test.aspx/SendData2"</span>,</pre>
<pre class="alt"> type: <span class="str">"POST"</span>,</pre>
<pre> contentType: <span class="str">"application/json"</span>,</pre>
<pre class="alt"> data: x,</pre>
<pre> dataType: <span class="str">"json"</span>,</pre>
<pre class="alt"> success: <span class="kwrd">function</span> (result) {</pre>
<pre> $(<span class="str">"#divResult"</span>).html(result.d);</pre>
<pre class="alt"> },</pre>
<pre> error: <span class="kwrd">function</span> (xhr, status) {</pre>
<pre class="alt"> alert(<span class="str">"An error occurred: "</span> + status);</pre>
<pre> }</pre>
<pre class="alt"> });</pre>
<pre> }</pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">script</span><span class="kwrd">></span></pre>
<pre><span class="kwrd"></</span><span class="html">head</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"><</span><span class="html">body</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">form</span> <span class="attr">id</span><span class="kwrd">="form1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">div</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">asp:GridView</span> <span class="attr">ID</span><span class="kwrd">="grid"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">AutoGenerateColumns</span><span class="kwrd">="false"</span> <span class="attr">ShowHeader</span><span class="kwrd">="true"</span> <span class="attr">ShowFooter</span><span class="kwrd">="true"</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">Columns</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">span</span> <span class="attr">id</span><span class="kwrd">="lblID"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span><span class="asp"><%</span># Eval(<span class="str">"ID"</span>) <span class="asp">%></span><span class="kwrd"></</span><span class="html">span</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">span</span> <span class="attr">id</span><span class="kwrd">="lblName"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span><span class="asp"><%</span># Eval(<span class="str">"Name"</span>) <span class="asp">%></span><span class="kwrd"></</span><span class="html">span</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">span</span> <span class="attr">id</span><span class="kwrd">="lblAmount"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span><span class="asp"><%</span># Eval(<span class="str">"Amount"</span>) <span class="asp">%></span><span class="kwrd"></</span><span class="html">span</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">FooterTemplate</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">id</span><span class="kwrd">="txtTotalAmount"</span></pre>
<pre> <span class="attr">value</span><span class="kwrd">="$0.00"</span> <span class="attr">style</span><span class="kwrd">="border:solid 1px Black;width:100px;background-color:#D1D1D1"</span> <span class="attr">onfocus</span><span class="kwrd">="this.blur();"</span> <span class="kwrd">/></span> </pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">FooterTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">asp:TemplateField</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">HeaderTemplate</span><span class="kwrd">></span></pre>
<pre class="alt"> All<span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="checkbox"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">id</span><span class="kwrd">="chkAll"</span> <span class="kwrd">/></span></pre>
<pre> <span class="kwrd"></</span><span class="html">HeaderTemplate</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="checkbox"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">id</span><span class="kwrd">="chkThis"</span> <span class="attr">value</span><span class="kwrd">='<%# Eval("Amount") %>'</span> <span class="kwrd">/></span></pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">ItemTemplate</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">asp:TemplateField</span><span class="kwrd">></span> </pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">Columns</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">asp:GridView</span><span class="kwrd">></span></pre>
<pre class="alt"> </pre>
<pre> <span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnSubmit1"</span> <span class="attr">value</span><span class="kwrd">="post form vars"</span> <span class="kwrd">/></span><span class="attr">&nbsp;</span></pre>
<pre class="alt"> <span class="kwrd"><</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="btnSubmit2"</span> <span class="attr">value</span><span class="kwrd">="post data"</span> <span class="kwrd">/></span></pre>
<pre> <span class="kwrd"><</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">="divResult"</span> <span class="kwrd">></</span><span class="html">div</span><span class="kwrd">></span></pre>
<pre class="alt"> <span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span></pre>
<pre> <span class="kwrd"></</span><span class="html">form</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="kwrd"></</span><span class="html">body</span><span class="kwrd">></span></pre>
<pre><span class="kwrd"></</span><span class="html">html</span><span class="kwrd">></span></pre>
</div>
<br/>-----------------------------------------------------------------<br/>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> System;</pre>
<pre><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="kwrd">using</span> System.Linq;</pre>
<pre><span class="kwrd">using</span> System.Web;</pre>
<pre class="alt"><span class="kwrd">using</span> System.Web.UI;</pre>
<pre><span class="kwrd">using</span> System.Web.UI.WebControls;</pre>
<pre class="alt"><span class="kwrd">using</span> System.Web.Services;</pre>
<pre> </pre>
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> jquerytest_test : System.Web.UI.Page</pre>
<pre>{</pre>
<pre class="alt"> <span class="kwrd">protected</span> <span class="kwrd">void</span> Page_Load(<span class="kwrd">object</span> sender, EventArgs e)</pre>
<pre> {</pre>
<pre class="alt"> <span class="kwrd">if</span> (!IsPostBack)</pre>
<pre> {</pre>
<pre class="alt"> List<MyEntity> list = <span class="kwrd">new</span> List<MyEntity>();</pre>
<pre> list.Add(<span class="kwrd">new</span> MyEntity() { ID = 1, Name = <span class="str">"toyota"</span>, Amount = 4200 });</pre>
<pre class="alt"> list.Add(<span class="kwrd">new</span> MyEntity() { ID = 2, Name = <span class="str">"mazda"</span>, Amount = 5200 });</pre>
<pre> list.Add(<span class="kwrd">new</span> MyEntity() { ID = 3, Name = <span class="str">"honda"</span>, Amount = 3000 });</pre>
<pre class="alt"> list.Add(<span class="kwrd">new</span> MyEntity() { ID = 4, Name = <span class="str">"bmw"</span>, Amount = 1200 });</pre>
<pre> grid.DataSource = list;</pre>
<pre class="alt"> grid.DataBind();</pre>
<pre> }</pre>
<pre class="alt"> }</pre>
<pre> </pre>
<pre class="alt"> [System.Web.Services.WebMethod()] </pre>
<pre> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> SendData1(NameValue[] formVars)</pre>
<pre class="alt"> {</pre>
<pre> <span class="kwrd">string</span> result = <span class="str">"Your form variables:<br/>"</span>; </pre>
<pre class="alt"> <span class="kwrd">foreach</span> (NameValue nv <span class="kwrd">in</span> formVars)</pre>
<pre> {</pre>
<pre class="alt"> <span class="rem">//ignore _ViewState/_EventValidation</span></pre>
<pre> <span class="kwrd">if</span> (!nv.Name.StartsWith(<span class="str">"__"</span>))</pre>
<pre class="alt"> {</pre>
<pre> result = result + nv.Name </pre>
<pre class="alt">+ <span class="str">" : "</span> + HttpUtility.HtmlEncode(nv.Value) + <span class="str">"<br/>"</span>;</pre>
<pre> }</pre>
<pre class="alt"> }</pre>
<pre> <span class="kwrd">return</span> result;</pre>
<pre class="alt"> }</pre>
<pre> </pre>
<pre class="alt"> [System.Web.Services.WebMethod()]</pre>
<pre> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> SendData2(<span class="kwrd">string</span> name, <span class="kwrd">string</span> city, DateTime date)</pre>
<pre class="alt"> {</pre>
<pre> <span class="kwrd">return</span> <span class="str">"you entered:<br/> "</span> + name + <span class="str">" in "</span> + city + <span class="str">" in "</span> + date.ToString();</pre>
<pre class="alt"> }</pre>
<pre>}</pre>
<pre class="alt"> </pre>
<pre><span class="kwrd">public</span> <span class="kwrd">class</span> MyEntity</pre>
<pre class="alt">{</pre>
<pre> <span class="kwrd">public</span> <span class="kwrd">int</span> ID { get; set; }</pre>
<pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre> <span class="kwrd">public</span> <span class="kwrd">decimal</span> Amount { get; set; }</pre>
<pre class="alt">}</pre>
<pre> </pre>
<pre class="alt"><span class="kwrd">public</span> <span class="kwrd">class</span> NameValue</pre>
<pre>{</pre>
<pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre> <span class="kwrd">public</span> <span class="kwrd">string</span> Value { get; set; }</pre>
<pre class="alt">}</pre>
</div>Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com2tag:blogger.com,1999:blog-1701603541105674369.post-85322467658796311182010-12-04T08:24:00.001+11:002010-12-04T08:24:40.474+11:00Reporting service quick report designAfter adding a new data source and a new report,<br/>
<a name='more'></a>
drag and drop a table from toolbox to the layout of the report.then select the table and right click, then click properties, then in the first(General) tab, choose the dataset name, then click on the groups tab, and then add a group, for each group, set the name and choose the expression and then visibility. normally the first group is visible, but the second level group visibility is hidden and can be toggled be another report item selected from the list.<br/>
Then from the dataset left panel, drag and drop the field for that group.
<br/>
if your report needs a parameter, right-click on the layout and click Report parameters and then add a new parameter, you might need to create a new dataset for available values for that parameter.<br/>
then go to the Data tab, edit your dataset to include the parameter and filter.
<br/>
then click on preview tab and see the report.Saeedhttp://www.blogger.com/profile/15327205174772794960noreply@blogger.com1