其实用from..Linq语句做外连接简单而且便于理解,我个人使用lamdba纯粹是技术上的追求吧
DataTable exceldt=new DataTable();
DataTable nomacdt=new DataTable();
exceldt = exceldt.AsEnumerable().GroupJoin(nomacdt.AsEnumerable(), a => a.Field<String>("COP_G_NO"), b => b.Field<String>("newmachineType"), (a, b) => new
{
G_NO = a.Field<Int32>("G_NO"),
COP_G_NO = a.Field<String>("COP_G_NO"),
G_QTY = a.Field<String>("G_QTY"),
QTY_1 = a.Field<String>("QTY_1"),
NET_WT = String.IsNullOrWhiteSpace(a.Field<String>("NET_WT")) ? (nomacdt.Rows.Count > 0 ? b.Select(c => c.Field<Decimal>("NW")).Single().ToString() : a.Field<String>("NET_WT")) : a.Field<String>("NET_WT"),
GROSS_WT = String.IsNullOrWhiteSpace(a.Field<String>("GROSS_WT")) ? (nomacdt.Rows.Count > 0 ? b.Select(c => c.Field<Decimal>("GW")).Single().ToString() : a.Field<String>("GROSS_WT")) : a.Field<String>("GROSS_WT"),
}).ToDataTable();
c#
//十进制转二进制
Console.WriteLine(Convert.ToString(69, 2));
//十进制转八进制
Console.WriteLine(Convert.ToString(69, 8));
//十进制转十六进制
Console.WriteLine(Convert.ToString(69, 16));
//二进制转十进制
Console.WriteLine(Convert.ToInt32(”100111101″, 2));
//八进制转十进制
Console.WriteLine(Convert.ToInt32(”76″, 8));
//十六进制转十进制
Console.WriteLine(Convert.ToInt32(”FF”, 16));
sql
--16进制数"0X00037FFE9994EE5E"转化为10进制:
select CONVERT(bigint,cast(0X00037FFE9994EE5E as varbinary)) as converted
--或:
select CONVERT(VARCHAR(50), CONVERT(bigint,0X00037FFE9994EE5E)) as converted
--在一个数据表中用nvarchar来存储该16进制数,用十进制取出
SELECT CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + N'00037FFE9994EE5E' AS char), 1))
在 web.config 中 <system.web> 一节下面添加类似如下内容:
<httpHandlers>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
假如我们要用JS显示一个TABLE,我们需要用ajax从后台获取一个数据集合 如DataTable或List等,然后再在JS里循环遍历,由于要控制样式等等,所以感觉有点麻烦。所以我就想在后台把HTML生成了,在客户端直接获取HTML,上代码:
在ascx中的代码
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</form>
在cs中的代码
//这里仅仅是手动组装了数据源
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Column1"), new DataColumn("Column2") });
DataRow dr = dt.NewRow();
dr["Column1"] = "1";
dr["Column2"] = 2;
dt.Rows.Add(dr);
//这里才是关键代码
WebUserControl1 wuc = this.LoadControl("/WebUserControl1.ascx") as WebUserControl1;
wuc.GridView1.DataSource = dt;
wuc.GridView1.DataBind();
Page p = new Page();
p.Controls.Add(wuc);
StringWriter tw = new StringWriter();
HttpContext.Current.Server.Execute(p, tw, false);
//html就是tw.ToString()啦
Response.Write(tw.ToString());
整报表的时候页面上的table是循环出来的没有数据源 所以需要导出Execl的时候就悲剧了,
然后想到用js到Execl,ActiveX未标记为安全,结果还要去设置浏览器,添加信任站点
最后又实在不想重整一边数据源,就用js把页面里Table里的数据转换成C#对应的DataTable的JSON格式,然后通过请求再发回到服务器,再反序列化成DataTable,然后就有数据源了
function TableToJson(tableid) {
var txt = "[";
var table = document.getElementById(tableid);
var row = table.getElementsByTagName("tr");
var col = row[0].getElementsByTagName("th");
for (var j = 1; j < row.length; j++) {
var r = "{";
for (var i = 0; i < col.length; i++) {
var tds = row[j].getElementsByTagName("td");
r += "\"" + col[i].innerHTML + "\"\:\"" + tds[i].innerHTML + "\",";
}
r = r.substring(0, r.length - 1)
r += "},";
txt += r;
}
txt = txt.substring(0, txt.length - 1);
txt += "]";
return txt;
}
收藏的工具代码
function formToHash(form){
var hash = {}, el;
for(var i = 0,len = form.elements.length;i < len;i++){
el = form.elements[i];
if(el.name == "" || el.disabled) continue;
switch(el.tagName.toLowerCase()){
case "fieldset":
break;
case "input":
switch(el.type.toLowerCase()){
case "radio":
if(el.checked)
hash[el.name] = el.value;
break;
case "checkbox":
if(el.checked){
if(!hash[el.name]){
hash[el.name] = [el.value];
}else{
hash[el.name].push(el.value);
}
}
break;
case "button":
break;
case "image":
break;
default:
hash[el.name] = el.value;
break;
}
break;
case "select":
if(el.multiple){
for(var j = 0, lens = el.options.length;j < lens; j++){
if(el.options[j].selected){
if(!hash[el.name]){
hash[el.name] = [el.options[j].value];
}else{
hash[el.name].push(el.options[j].value);
}
}
}
}else{
hash[el.name] = el.value;
}
break;
default:
hash[el.name] = el.value;
break;
}
}
form = el = null;
return hash;
}
当我们在vs里运行代码的时候,vs会自动运行asp.net Development Server ,这个程序的作用跟IIS一样
今天就尝试手动启动一下
在C盘找到WebDev.WebServer.exe
这个程序应该在一般在 C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\下,没有就去 C:\Windows\Microsoft.NET\Framework\v2.0.50727\看看
如果还没有那你就在C盘搜索一下吧
我写的bat文件是这样的
cd C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\ start WebDev.WebServer /port:9898 /path:D:\EssenceSystem\Essence\Essence.Web\
解释一下:
第一行是定位到WebDev.WebServer所在的目录
第二行才是关键 执行这个程序 有两个参数 port:指定端口 path:指定网站路径
即使你不知道也没事 因为只要执行这个程序 参数格式不正确就会有提示,如图:

看着这张图就知道该怎么写了
感言:
今天闲来没事给整了这么个小东西,和大家分享一下,当然知道这个命令怎么写并不只是为了可以手动启动asp.net Development Server ,我们还可以在程序中用代码启动这个程序,可以把网站打包成exe,不用去架什么IIS,随便在哪台机器, 只要装了相应的framework版本 ,那就能运行网站 ,在给客户做展示的时候会很方便,很牛B
任何一点小东西扩展开来,都有很大的开发潜力

