<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head><title></title> | |
<!--JQUERY UI--> | |
<script type="text/javascript" src="http://web.systemlead.com/bufferorderweb/scripts/jquery-2.0.1.min.js"></script> | |
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> | |
<script type="text/javascript"> | |
$(function () { | |
ShowMenu(); | |
}); | |
//顯示菜單 | |
function ShowMenu() { | |
var TRANSDT = '2013-09-07'; | |
var BOSTORE_NO = '30001000' | |
jQuery.ajax({ | |
url: 'http://web.systemlead.com/bufferorderweb/OrderProcess.aspx/ShowMenu', | |
type: 'post', | |
contentType: "application/json; charset=utf-8", | |
data: '{"BOSTORE_NO":"' + BOSTORE_NO + '","TRANSDT":"' + TRANSDT + '"}', | |
dataType: 'json', | |
success: BindMenuItem, | |
error: function () { | |
alert("error"); | |
} | |
}); | |
} | |
function BindMenuItem(response) { | |
//alert(response.d); | |
var rList = $.parseJSON(response.d); | |
var tmp = ""; | |
$.each(rList, function (i, item) { | |
//alert(item.aVAILABLE_QTYField); | |
var str1 = ""; | |
if ((item.aVAILABLE_QTYField).toString() != "0") { | |
str1 = "<input type='button' class='add' />" | |
+ "<input type='text' placeholder='0' class='align-center' value='0' onkeypress='TextBoxNumCheck_Int();' " | |
+ "id='txt" + item.mEALNOField + "' alt='" + item.mEAL_PRICEField + "'>" | |
+ "<input type='button' class='less' />" | |
+ "<span class='checkNumber'>數量:0</span>"; | |
} | |
else { | |
str1 = "<button class='info disabled center'>已售完</button>"; | |
} | |
tmp = tmp + "<div alt='dishesList _" + item.cAEGORY_NOField + "' id='" + "divMEALKIND" + item.mEALKINDField + "'>" | |
+ "<h2>" + item.mEALNAField + "</h2>" | |
+ "<span class='roll' title='" + item.dESCTXTField + "'></span>" | |
+ "<img src='http://web.systemlead.com/bufferorderweb/show_image.ashx?W=190&H=220&FID=" + item.fIDField + "' " | |
+ "alt='" + item.mEALNOField + "' title='" + item.dESCTXTField + "' " | |
+ "id='img" + item.mEALNOField + "' />" | |
+ "$" + item.mEAL_PRICEField + "元 <span>每日供應" + item.dATE_LIMITField + "份</span>" | |
+ "<div class='dishesMenu'>" | |
+ str1 | |
+ "</div></div>"; | |
}); | |
$("#rptMain").children().remove(); | |
$("#rptMain").append(tmp); | |
} | |
</script> | |
</head> | |
<body> | |
<form> | |
<div id='rptMain'></div> | |
</form> | |
</body> | |
</html> |
2013年9月6日 星期五
使用POST取得JSON資料
Google Map API - 地圖標點
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> | |
<meta charset="utf-8" /> | |
<title>遞送清單 </title> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> | |
<link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" | |
rel="stylesheet" /> | |
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=zh-TW"></script> | |
<script type="text/javascript" src="http://web.systemlead.com/EasyCartAdmin/Scripts/ELabels3.js"></script> | |
<style type="text/css"> | |
.site | |
{ | |
border: solid 1px #000000; | |
padding-left: 1em; | |
display: block; | |
width: 60px; | |
cursor: pointer; | |
margin: 5px; | |
} | |
div.markerLabel | |
{ /*markerLabeldisplay: block;*/ | |
text-align: center; /*background-color:white;*/ /*border:1px;*/ | |
width: 32px; | |
letter-spacing: 0px; | |
font-size: 16px; | |
font-family: Arial; | |
color: white; | |
} | |
</style> | |
<script type="text/javascript"> | |
//<![CDATA[ | |
var geocoder; | |
var map = null; | |
function initialize() { | |
geocoder = new google.maps.Geocoder(); | |
var latlng = new google.maps.LatLng(22.6253654, 120.36345639999993); | |
map = new google.maps.Map(document.getElementById('map-canvas'), { | |
zoom: 13, | |
center: latlng, //new google.maps.LatLng(25.036772, 121.520269), // 設定地圖中心點 | |
mapTypeId: google.maps.MapTypeId.ROADMAP // HYBRID,ROADMAP,SATELLITE,TERRAIN | |
}); | |
map.setOptions({ draggable: false, | |
// zoomControl: false, | |
scrollwheel: false, | |
// disableDoubleClickZoom: true, | |
// streetViewControl: false,//街景 | |
// scaleControl: false,//縮放 | |
// panControl: false //平移功能 | |
disableDefaultUI: true | |
}); | |
//顯示中心點 | |
ShowCenterPoint(); | |
//顯示外送點 | |
ShowPoint(); | |
} | |
function ShowPoint() { | |
try { | |
$("[id*=address]").filter(function () { | |
ShowPointByAddr($(this).val(), $(this).attr('alt')); | |
}); | |
} | |
catch (err) | |
{ } | |
} | |
var arySite = new Array(); | |
function addSite(map, siteCode, siteDesc, lat, lng, address) { | |
var pt = new google.maps.LatLng(lat, lng); | |
var label = new ELabel(map, | |
pt, | |
'<div id="arrowCanvas" >' + siteDesc + '<\/div>', | |
'markerLabel', // null | |
new google.maps.Size(-15, 9) | |
); | |
label.setMap(map); | |
// 讓圖的圓心在點上 | |
var icon = new google.maps.MarkerImage("http://web.systemlead.com/EasyCartAdmin/App_themes/Red/images/icons/red_circle.png", | |
new google.maps.Size(32, 32), // 大小 | |
new google.maps.Point(0, 0), // 原點 | |
new google.maps.Point(16, 16) // anchor | |
); | |
var marker = new google.maps.Marker({ | |
map: map, | |
position: pt, | |
title: siteDesc, | |
icon: icon | |
}); | |
} | |
function addSite2(map, siteCode, siteDesc, lat, lng, address) { | |
var pt = new google.maps.LatLng(lat, lng); | |
var label = new ELabel(map, | |
pt, | |
'<div id="arrowCanvas" >' + siteDesc + '<\/div>', | |
'markerLabel', // null | |
new google.maps.Size(-15, 9) | |
); | |
label.setMap(map); | |
// 讓圖的圓心在點上 | |
var icon = new google.maps.MarkerImage("../../App_themes/Red/images/icons/home.png", | |
new google.maps.Size(32, 32), // 大小 | |
new google.maps.Point(0, 0), // 原點 | |
new google.maps.Point(16, 16) // anchor | |
); | |
var marker = new google.maps.Marker({ | |
map: map, | |
position: pt, | |
title: siteDesc, | |
icon: icon | |
}); | |
} | |
function ShowPointByAddr(address, orderid) { | |
geocoder.geocode({ 'address': address }, function (results, status) { | |
if (status == google.maps.GeocoderStatus.OK) { | |
var x = results[0].geometry.location.lat(); | |
var y = results[0].geometry.location.lng(); | |
addSite(map, 4, orderid, x, y, address, 0, 0, '懸浮微粒', 0); | |
} else { | |
//alert("Geocode was not successful for the following reason: " + status); | |
} | |
}); | |
} | |
function ShowCenterPoint() { | |
var My_address = $("#txtHome").val(); | |
geocoder.geocode({ 'address': My_address }, function (results, status) { | |
if (status == google.maps.GeocoderStatus.OK) { | |
var latlng = results[0].geometry.location; | |
map.setCenter(latlng); | |
// var marker = new google.maps.Marker({ | |
// map: map, | |
// position: latlng | |
// }); | |
addSite2(map, 4, '', latlng.lat(), latlng.lng(), My_address, 0, 0, '懸浮微粒', 0); | |
} else { | |
//alert("Geocode was not successful for the following reason: " + status); | |
} | |
}); | |
} | |
$(document).ready(function () { initialize(); }); | |
//]]> | |
</script> | |
</head> | |
<body> | |
<div class="mapTitle"> | |
<span id="lblTRAINDT">2013/08/03</span><label> | |
遞送清單</label></div> | |
<div id="map-canvas" style="width: 650px; height: 500px"> | |
</div> | |
<div> | |
<input name="txtHome" type="hidden" id="txtHome" value="高雄市三民區建武路15號" /> | |
<table class="mapList"> | |
<tr> | |
<td> | |
1 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區00' alt='1'> | |
</td> | |
<td> | |
* 0 高雄市三民區00<br /> | |
<br /> | |
</td> | |
<td> | |
25元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
3 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市苓雅區00' alt='3'> | |
</td> | |
<td> | |
* 0 高雄市苓雅區00<br /> | |
1.玉米濃湯, 7 * 1 = 7<br /> | |
</td> | |
<td> | |
54元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
5 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市苓雅區1' alt='5'> | |
</td> | |
<td> | |
* 0 高雄市苓雅區1<br /> | |
<br /> | |
</td> | |
<td> | |
90元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
8 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區TEST' alt='8'> | |
</td> | |
<td> | |
TEST TEST 高雄市三民區TEST<br /> | |
1.有機石蓮花纖果, 12 * 1 = 12<br /> | |
</td> | |
<td> | |
70元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
10 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區大順一路32號' alt='10'> | |
</td> | |
<td> | |
莫須有 7190888 高雄市三民區大順一路32號<br /> | |
1.蕃茄炒蛋, 12 * 8 = 96|2.玉米濃湯, 7 * 4 = 28|3.皮蛋豆腐, 15 * 4 = 60|4.頂級洛神仙楂烏梅汁, 15 * 2 = | |
30|5.有機石蓮花纖果, 12 * 2 = 24<br /> | |
</td> | |
<td> | |
391元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
14 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區和順街63-1號6F' alt='14'> | |
</td> | |
<td> | |
李小龍 0987654321 高雄市三民區和順街63-1號6F<br /> | |
1.玉米濃湯, 7 * 2 = 14<br /> | |
</td> | |
<td> | |
57元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
15 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路' alt='15'> | |
</td> | |
<td> | |
鄭小 0755 高雄市三民區建工路<br /> | |
<br /> | |
</td> | |
<td> | |
52元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
16 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路' alt='16'> | |
</td> | |
<td> | |
沈 0912345789 高雄市三民區建工路<br /> | |
<br /> | |
</td> | |
<td> | |
45元 | |
</td> | |
</tr> | |
<tr> | |
<td> | |
17 | |
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路一號' alt='17'> | |
</td> | |
<td> | |
cherie 0929456123 高雄市三民區建工路一號<br /> | |
<br /> | |
</td> | |
<td> | |
85元 | |
</td> | |
</tr> | |
</table> | |
<div id="results" /> | |
</div> | |
</body> | |
</html> | |
JQuery測試網站
工欲善其事,必先利其器,要學習jquery除了筆記本等工具之外,也有線上版的開發測試工具。
http://jsfiddle.net/
左邊選單提供使用者選擇想要使用的javascript lib,如各版本的JQuery、ExtJS等。
雖然介面跟一般所見即所得的編輯器沒什麼太大不同,但左邊選單的功能卻大大的加分。
介面上將HTML、CSS、JavaScript分開,方便使用者更改測試語法。
網站還提供儲存機制十分便利,也方便分享。
補充:http://dotnetfiddle.net/
可以讓使用者線上測試C#的程式碼,並支援MVC架構,
當真是神器。
2013年9月5日 星期四
Google Map API - 計算兩地距離
<html> | |
<head> | |
<title></title> | |
</head> | |
<body> | |
<link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" | |
rel="stylesheet" /> | |
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=zh-TW"></script> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> | |
<script type="text/javascript"> | |
$(function () { | |
Distance(); | |
}); | |
function Distance() { | |
var start = "高雄市鳳山區光遠路226號"; | |
var end = "屏東市廣東路100號"; | |
var request = { | |
origin: start, | |
destination: end, | |
travelMode: google.maps.DirectionsTravelMode.DRIVING | |
}; | |
//宣告 | |
var directionsService = new google.maps.DirectionsService(); | |
directionsService.route(request, function (response, status) { | |
var strTmp = ""; | |
if (status == google.maps.DirectionsStatus.OK) { | |
var route = response.routes[0]; | |
for (var i = 0; i < route.legs.length; i++) { | |
var routeSegment = i + 1; | |
strTmp += route.legs[i].distance.text; | |
} | |
//取得距離(正整數,公尺) | |
var dist = parseInt(parseFloat(strTmp) * 1000).toString(); | |
alert(dist); | |
} | |
}); | |
} | |
</script> | |
</body> | |
</html> |
- start:起始地址
- end:目標地址
- 測試碼:http://jsfiddle.net/J96tq/1/
2013年9月3日 星期二
2013年7月16日 星期二
ASP.NET 透過ODBC連結MySQL
MySQL ODBC Driver:
安裝完成後,便可在ODBC上查詢到值:
PS:如果不清楚版本,那就32與64都安裝。
程式:
public DataTable GetMyDbList() | |
{ | |
OdbcConnection conn; | |
OdbcDataAdapter ap; | |
DataSet ds = new DataSet(); | |
string constr = "DRIVER={MySQL ODBC 5.2 ANSI Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=;OPTION=3"; | |
conn = new OdbcConnection(constr); | |
conn.Open(); | |
string cmdstr = "select * from mydb;"; | |
ap = new OdbcDataAdapter(cmdstr, conn); | |
ap.Fill(ds); | |
return ds.Table[0]; | |
} |
因為DRIVER安裝版本不同,名稱也會有所不同,
DRIVER={MySQL ODBC 5.2 ANSI Driver},紅色部分就是安裝後ODBC上顯示的名稱。以上圖為例,可表示為:
DRIVER={MySQL ODBC 5.2 ANSI Driver}
DRIVER={MySQL ODBC 5.2 Unicode Driver}
部署IIS注意事項:
- 測試 OS:WIN7或以上(64位元環境)
- 若是安裝的DRIVER版本為32位元,需要將應用程式集區的[啟用32位元應用程式]屬性改為True;64位元則使用預設值(False)。
2013年7月5日 星期五
Sitefinity CMS-Part04-使用WCF Webservice
Sitefinity除了提供Library讓使用者開發外,系統還提供wcf webservice。
以"pagesservice.svc"為例:
網址會回傳json檔,以下實作jquery取得json。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<title></title> | |
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> | |
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> | |
<script type="text/javascript"> | |
function GetJsonData(webserviceUrl, inputJson) { | |
var res; | |
$.ajax({ | |
type: "Get" | |
, url: webserviceUrl | |
, dataType: "json" | |
, contentType: "application/json;charset-utf-8" | |
, async: false | |
/*, data: inputJson*/ | |
, success: function (response) { | |
res = response; | |
} | |
, error: function () { res = "error"; } | |
}); | |
return res; | |
} | |
$(function () { | |
var webserviceUrl = "http://localhost/SitefinityCMS/Sitefinity/services/pages/pagesservice.svc/"; | |
var inputJson = ""; | |
var res = GetJsonData(webserviceUrl, inputJson); | |
$.each(res, function (key, item) { | |
if (key == "Items") { | |
$.each(item, function (key2, item2) { | |
if (key2 == "1") { | |
var str = ""; | |
$.each(item2, function (key3, item3) { | |
str = str +"<li>"+ key3 + ":" + item3 + "</li>"; | |
}); | |
var obj = $("#main"); | |
$(str).appendTo(obj); | |
} | |
}); | |
} | |
}); | |
/*var data = $.parseJSON(res);*/ | |
/*alert(data);*/ | |
}); | |
</script> | |
</head> | |
<body> | |
<div id="main"></div> | |
</body> | |
</html> |
結果:
Sitefinity CMS-Part03-自訂模組(widget)
參考影片: sitefinity官網
自訂模組的功能需要特定權限才可以進行開發。
在settings中,有自訂模組的功能,定義模組(usercontrol)的路徑。
設定好模組後,在頁面設定的功能,Custom下就可以選到自定義的模組。
Demo:
後臺內容管理:
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using System.Web.UI; | |
using System.Web.UI.WebControls; | |
using Telerik.Sitefinity; | |
namespace SitefinityWebApp.custom | |
{ | |
public partial class ucBlog : System.Web.UI.UserControl | |
{ | |
protected void Page_Load(object sender, EventArgs e) | |
{ | |
if (Page.IsPostBack) | |
return; | |
} | |
protected void btnCreateBlog_Click(object sender, EventArgs e) | |
{ | |
Telerik.Sitefinity.App.WorkWith().Blog().CreateNew().Do(b => b.Title = "My New Blog").SaveChanges(); | |
} | |
protected void btnCreatePosts_Click(object sender, EventArgs e) | |
{ | |
using (var fluent = App.WorkWith()) | |
{ | |
var blog = (from b in fluent.Blogs() | |
where b.Title == "My New Blog" | |
select b).First(); | |
for (int i = 0; i < 10; i++) | |
{ | |
blog.CreateBlogPost().Do(p => p.Title = "Blog Post" + i).SaveChanges(); | |
} | |
} | |
} | |
protected void DisplayPosts_Click(object sender, EventArgs e) | |
{ | |
var posts = from p in App.WorkWith().BlogPosts() | |
where p.Parent.Title == "My New Blog" | |
orderby p.Title | |
select p; | |
this.gvList.DataSource = posts.Get(); | |
this.gvList.DataBind(); | |
} | |
} | |
} |
2013年6月26日 星期三
LocalReport - 使用子報表
專案架構如下,專案下產生兩個報表(父報表與子報表)。
新增TypedDataSet(Ex:dsReport.xsd),範例定義如下。
在myReport.rdlc報表中,設定資料集屬性。
在myReport.rdlc報表中,新增子報表。
在myReport.rdlc報表中,設定[子報表屬性]。
設定要傳給子報表的參數。
在mySubReport.rdlc報表中,設定資料集屬性。
在mySubReport.rdlc報表中,設定參數,參數名稱要和[子報表參數]設定一致(EX:OrderID)。
程式部分:
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head runat="server"> | |
<title></title> | |
</head> | |
<body> | |
<form id="form1" runat="server"> | |
<div> | |
<asp:ScriptManager ID="ScriptManager1" runat="server"> | |
</asp:ScriptManager> | |
</div> | |
<asp:Button ID="btnShowReport" runat="server" Text="顯示報表" onclick="btnShowReport_Click"/> | |
<rsweb:ReportViewer ID="ReportViewer1" Width="100%" | |
runat="server"> | |
</rsweb:ReportViewer> | |
</form> | |
</body> | |
</html> |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using System.Web.UI; | |
using System.Web.UI.WebControls; | |
using System.Data; | |
using Microsoft.Reporting.WebForms; | |
namespace TestSubReport | |
{ | |
public partial class ShowReport : System.Web.UI.Page | |
{ | |
protected void Page_Load(object sender, EventArgs e) | |
{ | |
if (this.IsPostBack) | |
return; | |
} | |
private void ShowReportData() | |
{ | |
ReportViewer1.Visible = true; | |
//子報表繫結的事件 | |
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); | |
ReportViewer1.LocalReport.DataSources.Clear(); | |
ReportViewer1.ProcessingMode = ProcessingMode.Local; | |
ReportViewer1.LocalReport.ReportPath = HttpContext.Current.Server.MapPath(string.Format("~\\bin\\{0}", "myReport.rdlc")); | |
DataTable tbl = this.GetMasterData(); | |
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("myOrders", tbl)); | |
ReportViewer1.LocalReport.Refresh(); | |
} | |
/// <summary> | |
/// 繫結子報表 | |
/// </summary> | |
/// <param name="sender"></param> | |
/// <param name="e"></param> | |
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) | |
{ | |
//取得參數 | |
string orderid = e.Parameters["OrderID"].Values[0]; | |
//取得明細資料 | |
DataTable tbl = this.GetDetailData(orderid); | |
//繫結子報表 | |
e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("myOrdersDetail", tbl)); | |
} | |
/// <summary> | |
/// 點擊[顯示報表] | |
/// </summary> | |
/// <param name="sender"></param> | |
/// <param name="e"></param> | |
protected void btnShowReport_Click(object sender, EventArgs e) | |
{ | |
this.ShowReportData(); | |
} | |
/// <summary> | |
/// 取得單頭資料 | |
/// </summary> | |
/// <returns></returns> | |
private DataTable GetMasterData() | |
{ | |
DataTable tbl = new DataTable(); | |
DataColumn col = new DataColumn("OrderID"); | |
tbl.Columns.Add(col); | |
DataRow row = tbl.NewRow(); | |
row["OrderID"] = "A001"; | |
DataRow row2 = tbl.NewRow(); | |
row2["OrderID"] = "A002"; | |
tbl.Rows.Add(row); | |
tbl.Rows.Add(row2); | |
return tbl; | |
} | |
/// <summary> | |
/// 取得明細資料 | |
/// </summary> | |
/// <param name="OrderID"></param> | |
/// <returns></returns> | |
private DataTable GetDetailData(string OrderID) | |
{ | |
DataTable dtDetail = new DataTable(); | |
DataColumn col = new DataColumn("OrderID"); | |
DataColumn col2 = new DataColumn("Item"); | |
dtDetail.Columns.Add(col); | |
dtDetail.Columns.Add(col2); | |
DataRow row = dtDetail.NewRow(); | |
row["OrderID"] = "A001"; | |
row["Item"] = "A001-1"; | |
DataRow row2 = dtDetail.NewRow(); | |
row2["OrderID"] = "A002"; | |
row2["Item"] = "A002-2"; | |
dtDetail.Rows.Add(row); | |
dtDetail.Rows.Add(row2); | |
var query = from data in dtDetail.AsEnumerable() | |
where data.Field<String>("OrderID") == OrderID | |
select data; | |
DataTable tbl = query.CopyToDataTable<DataRow>(); | |
return tbl; | |
} | |
} | |
} |
打包:下載
2013年6月18日 星期二
NPOI與RDLC衝突
VS2010在寫報表時,因為有同時使用NPOI。
結果在編輯報表時,加入[資料表]時,整個專案就關掉了。
錯誤是發生在選擇資料集(加入資料表會去選資料集)的時候。
查了一下Google發現有相同的問題
簡易解法:
- NPOI某版本與RDLC互相衝突,換新版本就會好。
- 或是Report獨立另外一個專案。
MSSQL 產生Table結構含資料的指令碼
2013年6月10日 星期一
解決Winform輸入法BUG
WinForm在做輸入法切換時常發生錯誤。
Google了一下
寫個FormBase讓視窗繼承:
#region 解決輸入法BUG
//解決輸入法BUG
[DllImport("imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hwnd);
[DllImport("imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
IntPtr HIme = ImmGetContext(this.Handle);
ImmSetOpenStatus(HIme, true);
}
#endregion
private void InitializeComponent()
{
//停用IMEMODE
this.ImeMode = System.Windows.Forms.ImeMode.Off;
}
2013年6月7日 星期五
Sitefinity CMS-Part02
安裝好系統後,進入系統內(http://localhost/SitefinityCMS/Sitefinity/)。
系統會要求輸入帳號密碼(系統安裝時設定的管理者帳號密碼)
進入後,先看看Pages上的設定。
因為尚未建立任何頁面,所以畫面上出現了大大的Create a Page字樣。
設定Page的資訊。
若已建立頁面,則會出現管理清單。
在Actions功能中,可以設定頁面的相關資訊,如設為首頁,新增子頁等。
如建立好子頁,架構會如下圖所示,此時便可點擊view預覽。
整個系統的網址定義以Company為例(http://localhost/SitefinityCMS/about/company),
是有階層性的。
在此頁面也可以透過拖曳,來建立階層的關係。
進入頁面編輯的介面,左方為編輯區,右方為功能區。
加入widget(模組),可將功能區的widget功能拖曳至編輯區。
Layout可以讓使用者定義與更換。
內容功能區列表:功能很多,彈性很大。
編輯完成,選擇publish發佈。
此時輸入(http://localhost/SitefinityCMS/),便可以瀏覽到頁面。
此時若帳號還在登入的狀態時,頁面上可以看到Tools的功能按鍵,裡面可以設定是否顯示編輯按鈕。
這樣就可以在前台瀏覽時,直接點編輯進入修改,不須進入後台。
在後台頁籤中,Content頁籤主要就是在建立模組的內容,在此以新聞Content為例。
建立新聞的內容。
建立完成後,在後台加入News模組,就可以簡單的預覽到剛剛建立好的新聞。
而新聞模組也可以再設定顯示的條件,設定上面很有彈性。
2013年5月29日 星期三
IIS中http 回應標頭設定簡介
IIS中可以依照自己需求設定Http Header,可用來定義meta或是一些設定。
如下圖所示:每個框起來的地方,其實都可以設定自己的http header。
繼承設定:
設定http回應標頭時,若由最上層開始設定,子層便會繼承此設定。
以最上層來說,項目類型會寫"本機"。
而以EAP\DEMO為例,項目類型就會顯示"已繼承"。
移除繼承:
在這邊的子層會繼承父層的設定,但是如果不想繼承設定的話,在右邊有移除的功能,
點擊移除就可以。