2017年11月22日 星期三

asp.net -檔案權限控管

因為資料交換的需要,所以用WebAPI 接收資料,但實際上Clinet 只是發送要交換的資料檔案名稱,讓IIS 去讀取xml,待資料交換完畢後,移入Back Folder。


但xml 放置在其他主機,所以IIS 帳號必需要有足夠的權限去管理該資料夾

  • IIS 使用的帳戶為 NETWORK SERVICE 該帳號加入群組權限為 USERS
  • 該Folder開分享資料夾,並設定安全權限-進階
  • USERS-特別權限
    1. 列出資料夾/讀取資料
    2. 建立檔案/寫入資料
    3. 刪除

IIS 執行的身份識別與 Windows 權限控管不是你想的那樣

2017年11月21日 星期二

Crystal Report 固定行數,分頁


設定每頁25行

1.在 Crystal Report 的 rpt 中,產生多個細目區段,並畫入空白行格式(N-1個)。

2.在原來的細目資料中(細目a),開啟「區段專家」,在「在之後新增分頁」點選「公式」,鍵入以下公式 (資料列列表)

if onlastrecord then
false
else
   if RecordNumber mod 25 =0 then
      true
   else
      false

3.每個空白行細目區段中,開啟「區段專家」,在「抑制顯示(無擷取項目)」點選「公式」,鍵入以下公式(補空白列,要幾列,就得新增幾行)


細目b(第一個):

if not onlastrecord or (RecordNumber mod 25 = 0) then
TRUE
else
   if (RecordNumber mod 7 <=1 ) then //第一筆
FALSE
   else
   TRUE

細目c(第二個):

if not onlastrecord or (RecordNumber mod 25 = 0) then
TRUE
else
   if (RecordNumber mod 25 <=2 ) then //第二筆
FALSE
   else
TRUE


來源參考 http://wushinetlife.blogspot.tw/2012/03/crystal-report.html
   



2017年10月18日 星期三

datepicker-日曆週數設定,取一周區間日期

1.週數:發現週數與現行不符,可以自定週數

$(function () {
self.moveTo(0, 0);
self.resizeTo(screen.availWidth, screen.availHeight);
$("#ContentPlaceHolder1_txt_sDt").datepicker({
dateFormat: 'yy-mm-dd',
showButtonPanel: true,
showOn: "both",

buttonImage: "../image/calendar.gif",
buttonImageOnly: true,
buttonText: "日期",
//default:false
showWeek: true,
//顯示周數的標題
//default""wk"
weekHeader: "W",
//自訂計算周數的方法,
//default datepicker.iso8601Week
calculateWeek: myWeekCalc

});
});



function myWeekCalc(date) {
var checkDate = new Date(date.getTime());
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay()));
var time = checkDate.getTime();
//設定1月1日
checkDate.setMonth(0);
checkDate.setDate(1);
return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
}

2.取得一周的區間

function GetNowWeekPeriod(Curr) {
// 現在日期
var cDt = Curr.replace(/-/g, '/'); //轉換日期格式
var myDate = new Date(cDt);


// 現在是星期幾,日為0、一為1、二為2、三為3、四為4、五為5、六為6
var myDay = myDate.getDay();

// 設成日為7
//if (myDay == 0) {
// myDay = 7;
//}

var myStartDate = new Date(cDt);


// myStartDate.setDate(myStartDate.getDate() + (0 - (myDay - 1)));
//myDate.setDate(myStartDate.getDate() + (0 - (myDay - 1)));
myDate.setDate(myStartDate.getDate() + (0 - (myDay ))); //// 將日期變成目前禮拜的星期一

var myEndDate = new Date(cDt);

// 將日期變成目前禮拜的星期日
myEndDate.setDate(myEndDate.getDate() + (7 - myDay-1));

$("#ContentPlaceHolder1_txt_sDt").val(myDate.format("yyyy/MM/dd")); //輸出格式
$("#ContentPlaceHolder1_txt_eDt").val(myEndDate.format("yyyy/MM/dd"));//輸出格式

}
});

2017年8月9日 星期三

在App_Start的BundleConfig.cs

BundleConfig是VS 2013中的新功能,

    public class BundleConfig
    {

        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725

        /// <summary>
        /// 在開發時
        /// 設定web.config=> compilation debug="true" 可直接使用.js 檔作開發,
        ///
        /// 在發佈時
        /// 設定web.config=> compilation debug="false" 在發佈於正式網站後,.js .css 系統會自動壓縮,並加密。(*.js=> *.mm.js)
        /// </summary>
        /// <param name="bundles"></param>
        public static void RegisterBundles(BundleCollection bundles)
        {
            #region 放在layout中,所有網頁可共用的js

            //jquery.unobtrusive-ajax.js
            //js-程式庫
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));
            //js -UI元件
            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js"));

            //js -ajax元件 MVC5預設不安裝 ,新增網站需要安裝
            //http://blog.miniasp.com/post/2014/11/10/ASPNET-MVC-5-Microsoft-jQuery-Unobtrusive-Ajax-lost-and-found.aspx
            bundles.Add(new ScriptBundle("~/bundles/jqueryajax").Include(
            "~/Scripts/jquery.unobtrusive-ajax*"));

            //套JavaScript UI程式庫,主要用來在網頁實現MVVM設計模式
            //http://blog.darkthread.net/post-2012-05-09-knockout-js-intro.aspx
            bundles.Add(new ScriptBundle("~/bundles/knockout").Include(
                        "~/Scripts/knockout-{version}.debug.js"));

         

            #endregion
           
            #region 單一網頁include

            //js-表單驗證才需載入
            //Scripts\jquery.validate.unobtrusive.js
            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.validate*"));
            #endregion

            #region aps.net 預設/css

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
            #endregion



        }
    }

asp.net 呼叫javascript

protected void Btn_Sub_OK_Click(object sender, EventArgs e)
        {

          //call 是個標記,可無;
          //wrong('msg') javascript function ;
          ClientScript.RegisterStartupScript(this.GetType(), "", "wrong('" + show + "')", true);
   

        }

ReportViewer 的子報表



------------------------------
//1.輸出report
private void outereport()
    {
        //ZoomPercent
        ReportViewer1.PageCountMode = PageCountMode.Actual; //顯示實際頁數
        ReportViewer1.ShowToolBar = true;
        ReportViewer1.Visible = true;
        ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); //recallback
   
        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.ProcessingMode = ProcessingMode.Local;

        this.ReportViewer1.LocalReport.ReportPath = "oqc_report\\oqc_inspect.rdlc";
        this.ReportViewer1.LocalReport.DataSources.Clear();
        this.ReportViewer1.LocalReport.DataSources.Add(Query());
        this.ReportViewer1.AsyncRendering = false;
        this.ReportViewer1.SizeToReportContent = true;//ReportViewer1配合報表大小。 
        ReportViewer1.LocalReport.EnableExternalImages = true;


        /**************************************************/
        this.ReportViewer1.LocalReport.Refresh();
    }

//依主報表的資料,發送子報表的參數
 private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
    {
        // 取得參數
            string spectid = e.Parameters["spectid"].Values[0];
        //取得明細資料
        DataTable tbl = this.GetDetailData(spectid);
        //繫結子報表
        e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("defect", tbl));

    }



取得物件類別-typeof(DropDownList)/GetType()

private void ClearControlValue(params Control[] ctols)
{
    foreach (Control ctol in ctols)
    {
        string cType = ctols.GetType().Name;
        if (typeof(TextBox).Name == cType)
        {
            (ctol as TextBox).Text = string.Empty;
        }
        else if (typeof(DropDownList).Name == cType)
        {
            (ctol as DropDownList).Items.Clear();
        }
        else if (typeof(CheckBox).Name == cType)
        {
            (ctol as CheckBox).Checked = false;
        }
        else if (typeof(CheckBoxList).Name == cType)
        {
            (ctol as CheckBoxList).SelectedIndex = -1;
        }
        else if (typeof(RadioButton).Name == cType)
        {
            (ctol as RadioButton).Checked = false;
        }
        else if (typeof(RadioButtonList).Name == cType)
        {
            (ctol as RadioButtonList).SelectedIndex = -1;
        }
        else if (typeof(Label).Name == cType)
        {
            (ctol as Label).Text = string.Empty;
        }
    }
}

protected void DisableControls(Control parent, bool State) {
    foreach(Control c in parent.Controls) {
        if (c is DropDownList) {
            ((DropDownList)(c)).Enabled = State;
        }

        DisableControls(c, State);
    }
}