2010年7月26日 星期一

SSRS匯出Excel格式的問題

SSRS匯出Excel會跑版,報表在PDF格式是一頁,結果在Excel預覽列印時會變成兩頁,就算是欄位很少的報表也是一樣,與同事討論之後,發現可以使用UNIX裡的Pipe概念,SSRS的輸出是NPOI的輸入,最後再輸出至前端,相當於都讓SSRS做格式的輸出,最後請NPOI調整Excel的設定,要不然就只能使用其他軟體廠商開發在SSRS上面的Render元件,或是自己重寫某個Render。
以下的程式碼是NPOI如何接收SSRS輸出的程式碼。

byte[] bytes = ReportViewer1.ServerReport.Render(
"Excel", null, out mimeType, out encoding, out extension,
out streamids, out warnings);

MemoryStream msExcel = new MemoryStream(bytes);
HSSFWorkbook workbook = new HSSFWorkbook(msExcel);

[MSDN Magazine]Display Your Data Your Way with Custom Renderers for Reporting Services
How to Change the Default Rendering on SSRS

2010年7月18日 星期日

Silverlight 版本的線上小畫家-與縮圖進行互動


縮圖不只是將圖片縮小而已,並且座標也會跟著縮小,例如縮圖紅色矩形左上角的座標,與原圖紅色矩形左上角的座標相等。




下圖左上角是縮圖,我希望在縮圖上按下滑鼠左鍵時,在ScrollViewer上的原圖會移到這個區域,當我在原圖上面進行繪圖時,縮圖的內容也要跟著改變。





初次產生縮圖時,需要設定縮放比例。

ScaleTransform scaleScaleMap = new ScaleTransform();
if (ScaleX >= ScaleY)
{
scaleScaleMap.ScaleX = ScaleX;
scaleScaleMap.ScaleY = ScaleX;
}
else
{
scaleScaleMap.ScaleX = ScaleY;
scaleScaleMap.ScaleY = ScaleY;
}

ScaleMap.Background = imageBrush; ;
ScaleMap.RenderTransform = scaleScaleMap;


當原圖有改變需要更新縮圖時,呼叫UpdateScaleMap(),其中WriteableBitmap有Transform參數可用。

void UpdateScaleMap()
{
if (ScaleMap.Visibility == Visibility.Visible)
{
WriteableBitmap bitmap = new WriteableBitmap(TracingPaper, null);
ImageBrush ib = new ImageBrush();
ib.ImageSource = bitmap;
ScaleMap.Background = ib;
}
}


C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)制作精美的Mini地图① - 深蓝色右手 - 博客园

2010年7月16日 星期五

Silverlight 版本的線上小畫家-ScrollViewer的捲軸

現在有個新的需求,使用者希望建立或移動小畫家上面的物件時,捲軸也能夠跟著移動,這樣操作起來比較人性化。

//向右移
if (e.GetPosition(ImageViewer).X > ImageViewer.ViewportWidth - 10)
{
if (ImageViewer.HorizontalOffset != ImageViewer.ScrollableWidth)
{
double doubleHorizontalOffset = ImageViewer.HorizontalOffset;
if (doubleHorizontalOffset + 10 <= ImageViewer.ScrollableWidth)
{
doubleHorizontalOffset += 10;
ImageViewer.ScrollToHorizontalOffset(doubleHorizontalOffset);
}
else
{
ImageViewer.ScrollToHorizontalOffset(ImageViewer.ScrollableWidth);
}
}
}

2010年7月1日 星期四

不是「不對盤」,而是「爹不疼娘不愛」!

C君在開會時又被老闆電了。開會時大家都為著專案,從不同的角度切入問題點,有點火氣在所難免,但是C君與老闆的互動總是覺得有些不同,讓人覺得彼此有些不對盤,然而在我看來並非如此。


新同事對於專案的某些功能短時間內無法完成,老闆不但體諒他是新人,並且還打算將部分工作外包;對於C君,好像…對他有比較大的期望,因此對於他的要求比較嚴格。在我看來C君救火隊的角色依然努力認真,相信總有一天能夠得到大家的肯定。


套一句小K的一句話「太慢了,得快點做出一些成績才行!」,C君,我會跟你一起加油的!

資料庫中已經有一個名為 'PK_AgrRRRF01' 的物件。


因為用SQL建立資料表時,PK_AgrRRRF01發生重複,逼迫我將PK_AgrRRRF01改成PK_AgrRRRF01_2,雖然資料表建立成功,可是我仍然心有不甘,想要知道是那個資料表佔用這個名字,於是我下了以下指令搜尋:


SELECT name, object_id, OBJECT_NAME(object_id) AS object_name, parent_object_id, OBJECT_NAME(parent_object_id) AS table_name
FROM sys.objects
WHERE type = 'PK' AND name LIKE '%PK_AgrRRRF01%'
ORDER BY name ASC


其中OBJECT_NAME()傳回結構描述範圍物件的資料庫物件名稱,name是物件名稱,object_id是物件識別碼,parent_object_id是這個物件所屬的物件識別碼(0 = 不是子物件)。


參考資料
sys.objects (Transact-SQL)