TOP

[C#] CreateUserWizard + DropDownList 使用AutoPostBack及OnSelectedIndexChanged 無反應

 CreateUserWizard + DropDownList 使用AutoPostBack及OnSelectedIndexChanged 無反應

這個問題真的很怪,正常的狀況下AutoPostBack之後一定會去執行OnSelectedIndexChanged ,但掛在預設的CreateUserWizard 內使用時卻無反應。

解決的方式是把CreateUserWizard 內的 ViewStateMode="Disabled" 移除,就正常執行了。
TOP

[C#] ListView 利用 GridView 達成分頁功能

因為在asp.net 3.5 的狀況下 ListView沒有提供分頁的功能。
一般的做法都是用以下兩種方式:
(1)ListView + DataPager + LinqDataSource
(2)ListView + DataPager + SQLDataSource

但因為資料來源不是從LinqDataSource或SQLDataSource取得,所以使用DataPager 造成很多不必要的麻煩,改用ListView +GridView 的方式,雖然會浪費資源及效能但同樣可以執成同樣的效果。

一、ASPX新增及建立

1.GridView 的相關設定,並且在Columns新增一個項目,利用CSS做隱藏

<pre class='codeblock'>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" GridLines ="None" onpageindexchanging="GridView1_PageIndexChanging" onrowdatabound="GridView1_RowDataBound" >
         <PagerSettings FirstPageText="_FirstPage" LastPageText="_LastPage" Mode="NumericFirstLast" NextPageText="_NextPage" PreviousPageText="_PreviousPage" PageButtonCount="2" />
         <Columns>
             <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name"
             ReadOnly="True" ItemStyle-cssclass="hiddencol" HeaderStyle-CssClass="hiddencol">
              <HeaderStyle CssClass="hiddencol"></HeaderStyle>
               <ItemStyle CssClass="hiddencol"></ItemStyle>
           </Columns>
            <FooterStyle HorizontalAlign ="Left" />
            <PagerStyle HorizontalAlign="Center" Font-Size="10" BackColor="#ffffff"                                                      ForeColor="#0072BC" Wrap="False" CssClass="PagerCss"></PagerStyle>
        </asp:GridView>
</pre>

2.增加CSS
<pre class='codeblock'>
<style type="text/css">
    .hiddencol
    {
        display:none;
    }
    .viscol
    {
        display:block;
    }
 
   .PagerCss TD A:hover { width: 20px; color: blue; }
    .PagerCss TD A:active { width: 20px; color: black; }
    .PagerCss TD A:link {width: 20px; color: Green;}
    .PagerCss TD A:visited { width: 20px; color:black ; }
    .PagerCss TD SPAN { font-weight: bold; font-size: 25px; width: 20px; color: red;  background-color:Silver ; }  
</style>
</pre>

3.ListView相關設定
<pre class='codeblock'>
    <asp:ListView ID="ListView1" runat="server" onitemdatabound="ListView1_ItemDataBound">
        <LayoutTemplate>
                <span ID="itemPlaceholder" runat="server"></span>
        </LayoutTemplate>
        <ItemTemplate>
             <asp:Label ID="Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
        </ItemTemplate>
    </asp:ListView>
</pre>

二、Code Behind新增及建立
1.建立全域變數的DataTable 及DataView
<pre class='codeblock'>
    public partial class Page : System.Web.UI.UserControl
    {
        public DataTable dt= new DataTable();
        public DataView dv = new DataView();
    }
</pre>

2.建立DataTable 的結構,並取得資料來源。
<pre class='codeblock'>
    protected void Page_Load(object sender, EventArgs e)
    {
        dt.Columns.Add("Name");
        dv = dt.DefaultView;
        DataView dvSource = GetSource();
        GridView1.DataSource = dvSource ;
        GridView1.DataBind();
        ListView1.DataSource = dv;
        ListView1.DataBind();
    }
</pre>
3.
<pre class='codeblock'>
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRow dr = dv.Table.NewRow();
            dr["Name"] = DataBinder.Eval(e.Row.DataItem, "Name") as string;
            dv.Table.Rows.Add(dr);
        }
    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.EditIndex = -1;
        GridView1.PageIndex = e.NewPageIndex;
        dt.Columns.Add("Name");
        dv = dt.DefaultView;
        DataView dvSource = GetSource();
        GridView1.DataSource = dvSource ;
        GridView1.DataBind();
        ListView1.DataSource = dv;
        ListView1.DataBind();
    }

    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
         Label Name = (e.Item.FindControl("Name") as Label);
         string Name = DataBinder.Eval(dataItem.DataItem, "Name ").ToString();
     }
</pre>

參考資料 :
http://charlesbc.blogspot.tw/2010/05/iqueryable-gridview-rowdatabound.html
http://www.dotblogs.com.tw/dennismao/archive/2009/08/10/9977.aspx?fid=16726
http://kennyfan88.pixnet.net/blog/post/84881604-%E4%BD%BF%E7%94%A8datatable%E5%8A%A0%E5%85%A5%E6%AC%84%E4%BD%8D%E3%80%81%E6%96%B0%E5%A2%9E%E6%AC%84%E4%BD%8D%E5%90%84%E8%B3%87%E6%96%99%E5%88%97
TOP

[C#] 在TextBox按下鍵盤上Enter後自動執行某一個button click

在TextBox按下鍵盤上Enter後自動執行某一個button click

會發生這個狀況是因為程式會自動執行Postback,並且當頁面內有button物件時,就會執行button click。

參考資料:
http://www.cnblogs.com/jiajiayuan/archive/2011/08/26/2154596.html
http://wellylin.blogspot.tw/2012/02/aspnet-form-submit-keypress-by-enter.html

解決的方式,可以利用panel預設default button或是利用javascript阻擋。
(1)利用panel預設default button
     <asp:Panel ID="asp:Panel1" runat="server" DefaultButton="btDefaultButton">
            <asp:Button ID="btDefaultButton" runat="server" Text="_DefaultButton" style="display:none" />
        </asp:Panel>

參考資料:
http://eos45.pixnet.net/blog/post/48273310-asp.net-%E8%AE%93-enter-%E7%84%A1%E6%95%88

(2)利用javascript阻擋
txtTitle.Attributes.Add("onkeypress", "if( event.keyCode == 13 ) { return false; }");

參考資料:
http://demo.tc/Post/233

(3)利用javascript指定執行的button click
Me.txt_pass.Attributes.Add("onkeypress", "if( event.keyCode == 13 ) {"& Me.ClientScript.GetPostBackEventReference(Me.btn_pass, "")& "}")
參考資料:
http://blog.xuite.net/tolarku/blog/39441722-TextBox+%E8%BC%B8%E5%85%A5%E5%AE%8C%E6%8C%89%E4%B8%8B+Enter+%E8%A7%B8%E7%99%BC%E6%8C%89%E9%88%95%E4%BA%8B%E4%BB%B6


http://nelsonkai.blogspot.tw/2008/12/text-boxentersend.html

(4)利用javascript在 Enter 鍵被按下時,改成 Tab 鍵
參考資料:
http://charlesbc.blogspot.tw/2009/06/aspnet-enter-tab.html

(5)利用 form defaultbutton
<asp:Button ID="btDefaultButton" runat="server" Text="_DefaultButton" style="display:none" />

    this.Form.DefaultButton = btDefaultButton.UniqueID;
    btDefaultButton.Style.Add("display", "none");


TOP

[SQL Server] 將會員登入機制ASPNETDB.MDF轉到SQL Server

預設的會員登入機制是在App_Data資料夾內建立ASPNETDB.MDF,因為是需要上線的會員登入機制,希望能將資料轉存至SQL Server內。

1.轉移的方式,主要是使用ASP.NET 附加資料庫轉移工具:Aspnet_reqsql.exe

路徑:C:\Windows\Microsoft.NET\Framework\v2.0.50727
參考:http://msdn.microsoft.com/en-us/library/ms229862.ASPX

2.移轉的安裝步驟可以參考以下資料:
http://www.dotblogs.com.tw/keigen/archive/2012/02/01/67152.aspx
(1)大部份都是執行「下一步」
(2)選擇「設定應用程式服務的SQL Server」
(2)輸入「伺服器名稱」
(3)選擇「Windows驗證」或是「SQL Server驗證(輸入使用者名稱及密碼)」
(4)選擇資料庫
(5)之後就都是「下一步」
(6)最後就是「完成」

參考資料:http://www.studiocoast.com.au/knowledgebase/6/aspnet/using-sql-server-instead-of-aspnetdbmdf.aspx

3.檢查SQL Server資料表,應該會有11個aspnet_XXXXXX名稱的資料表

4.因為資料庫的位置從App_Data下的ASPNETDB.MDF,移轉到SQL Server所以要重新設定Web.config的資料庫連接字串。

  <connectionStrings>
    <add name="UserAspNetConnectionString" connectionString="Data Source=xxxx\SQLEXPRESS;Initial Catalog=aspnetdb;User ID=xxxxxx;Password=xxxxxx;Min Pool Size=10;Max Pool Size=1000;Pooling=false;Connect Timeout=45;" providerName="System.Data.SqlClient" />  
  </connectionStrings>

5.設定Provider的連接字串(藍字的UserAspNetConnectionString)。

   <profile defaultProvider="DefaultProfileProvider" enabled="true">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="UserAspNetConnectionString" applicationName="/" />    
      </providers>
      <properties>
        <add name="FirstName" type="System.String"/>
        <add name="LastName" type="System.String"/>
      </properties>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="UserAspNetConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="UserAspNetConnectionString" applicationName="/" />
      </providers>
    </roleManager>

參考資料:
http://www.dotblogs.com.tw/dislin/archive/2010/07/28/16868.aspx

http://dnowba.blogspot.tw/2011/10/blog-post_3144.html

http://www.dotblogs.com.tw/topcat/archive/2008/06/02/4201.aspx

http://dnowba.blogspot.tw/2011/10/blog-post_3144.html