달력

072018  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  


RegularExpressionValidator를 써서 구현 하면 된다. 정규식은 아래와 같다.

[^\s]{6,20} : 첫자가 스페이스가 들어가면 안되고 6자이상 20자 이하의 문자
.*[^A-Za-z0-9].* : A-Z, a-z, 0-9 이외의 문자가 하나 이상 들어갈 것

RegularExpressionValidator를 두개 만들어서 각각 걸어주었다.


// 실제 예
<asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server"
ControlToValidate="EDT_NEW_PW"
ErrorMessage="Password consist of at least 6 characters, with no leading spaces."
Display="None" Text = "*"
ValidationExpression="[^\s]{6,20}">
</asp:RegularExpressionValidator>          
    
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"
ControlToValidate="EDT_NEW_PW"
ErrorMessage="Password must contain at least on non-alphanumeric character."
Display="None" Text = "*"
ValidationExpression=".*[^A-Za-z0-9].*">
</asp:RegularExpressionValidator>

// 2007. 8. 7 : 내용이 다 깨져보여서 살짝 편집~

Posted by 알이씨


요구사항 : 동적으로 구성한 Table Control의 상태를 유지
배경 : Database에서 특정 데이터를 가져와 가공한 뒤 사용자의 입맛에 맞게 테이블로 그 결과를 구성하였다. 하지만 다른 컨트롤을 조작하여 PostBack이 일어난다면 이전에 바운딩한 테이블 정보들이 모두 초기화 된다. 따라서 PostBack이 일어나도 이전 단계의 테이블 상태를 유지하는 것이 필요하였다.
조건 : 테이블 내용이 바뀔 필요가 없는 경우 PostBack이 일어난 뒤 DB 접근은 하지 않는다.

예제 코드

 Table Table_Work_History;

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack){            
        if(Session["Table"] != null){
            Table_Work_History = (Table)Session["Table"]; // 저장된 테이블 상태 로딩
            PH.Controls.Add(Table_Work_History); // PH : Place Holder
        }           
    }
}

protected void rend_working()
{
    // Bounding Code

    Session["Table"] = Table_Work_History; // 테이블 상태를 세션에 저장
}

참고 :
 - Place Holder를 쓴이유는 테이블을 로딩한 후에 특정 위치에 넣어주기 위함이다.
 - Session을 이용하여 상태를 저장한 이유는 ViewState를 사용하면 Serializable 예외가 발생하기 때문이다.
        

Posted by 알이씨


목표 : TreeView의 각 노드에 체크박스를 두고 부모를 체크 하면 자식들은 모두 부모에 따름

웹 검색을 하다가 유용한 자료가 있어서 퍼왔습니다. 출처는 제일 아래에 있네요.
저는 이 소스를 다 쓴건 아니고 스크립트 부분만 썼습니다. PostBack 방식으로 했는데.
아무래도 좀 불편한거 같네요...
=====================================================================
체크 박스 이므로 여러개를 선택할수 있도록 체크 박스를 선택할때마다 이벤트가 발생하지는 않습니다.

그래서 약간의 편법을 이용한 자료를 올려 보겠습니다.


1. postback 처리

<%@ Page Language="C#" %>

<script runat="server">
protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
    foo(e.Node, e.Node.Checked);
}
private void foo(TreeNode e, bool check)
{
    e.Checked = check;
    foreach (TreeNode t in e.ChildNodes)
    {
        foo(t, check);
    }
}

</script>


<script>
function foo()
{
    var o = window.event.srcElement;
    if (o.tagName == "INPUT" && o.type == "checkbox"){
        __doPostBack("","");
    }
}
</script>

<html>

<head id="Head1" runat="server">

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:TreeView onclick="foo()" ID="TreeView1" runat="server" ExpandDepth="4" EnableClientScript="False"

                ShowCheckBoxes="All" OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">

                <Nodes>

                    <asp:TreeNode ShowCheckBox="True" Value="a" Text="a">

                        <asp:TreeNode Value="aa" Text="aa">

                            <asp:TreeNode Text="aaa" Value="aaa">

                                <asp:TreeNode Text="aaaa" Value="aaaa"></asp:TreeNode>

                                <asp:TreeNode Text="abbb" Value="abbb"></asp:TreeNode>

                            </asp:TreeNode>

                            <asp:TreeNode Text="bbb" Value="bbb">

                                <asp:TreeNode Text="bbbb" Value="bbbb"></asp:TreeNode>

                            </asp:TreeNode>

                            <asp:TreeNode Text="ccc" Value="ccc"></asp:TreeNode>

                        </asp:TreeNode>

                    </asp:TreeNode>

                    <asp:TreeNode Text="bb" Value="bb">

                        <asp:TreeNode Text="bbb" Value="bbb"></asp:TreeNode>

                    </asp:TreeNode>

                </Nodes>

            </asp:TreeView>

        </div>

    </form>

</body>

</html>


2. 웹페이지상에서 스크립트로 처리 ..

<%@ Page Language="C#" %>

<html >

<head id="Head1" runat="server">

    <title>XML Tree View</title>

    <script language="javascript">

        //***each node in a TreeNode is a <table> and the level that a node exists on is

        //***decided by the number of columns in the table (that are use to push it out)

        //***CAVEATS

        //***(1)This only works with a static TreeView

        //***(2)This only works properly if EnableClientScript=true

        //***(3)If Microsoft(R) changes the HTML use to render the Nodes then this is obsolete

        //***(4)This does not account for all design considerations, but should be a good start

        function client_OnTreeNodeChecked() {      

            var obj = window.event.srcElement;

            var treeNodeFound = false;

            var checkedState;

           

            if (obj.tagName == "INPUT" && obj.type == "checkbox") {

                //easier to read

                var treeNode = obj;

               

                //record the checked state of the TreeNode

                checkedState = treeNode.checked;

               

                //work our way back to the parent <table> element      

                do {

                    obj = obj.parentElement;

                } while (obj.tagName != "TABLE")

           

                //keep track of the padding level for comparison with any children

                var parentTreeLevel = obj.rows[0].cells.length;

           

                //get all the TreeNodes inside the TreeView (the parent <div>)

                var tables = obj.parentElement.getElementsByTagName("TABLE");

               

                //total number of TreeNodes

                var numTables = tables.length


                if (numTables > 1) {

                    //cycle through all the TreeNodes

                    //until we find the TreeNode we checked

                    for (i=0; i < numTables; i++) {

                        if (tables[i] == obj) {

                            treeNodeFound = true;

                            i++;

                            if (i == numTables) {

                                //if we're on the last

                                //TreeNode then stop

                                return;

                            }

                        }

                       

                        //when found examine the TreeLevel of each of

                        //the preceding TreeNodes

                        if (treeNodeFound == true) {

                            var childTreeLevel = tables[i].rows[0].cells.length;

                           

                            //if the current node is under the parent

                            //the level will be deeper (greater)

                            if (childTreeLevel > parentTreeLevel) {

                           

                                //jump to the last cell... it contains the checkbox

                                var cell = tables[i].rows[0].cells[childTreeLevel - 1];

                               

                                //set the checkbox to match the checkedState

                                //of the TreeNode that was clicked

                                var inputs = cell.getElementsByTagName("INPUT");

                                inputs[0].checked = checkedState;

                            } else {

                                //if any of the preceding TreeNodes are not deeper stop

                                return;

                            }//end if

                        }//end if

                    }//end for

                }//end if

            }//end if

        }//end function

    </script>

</head>

<body>

    <form id="form1" runat="server">

    <asp:XmlDataSource ID="xmlSrc" runat="server" />

    <div>

    <asp:TreeView

        onclick="client_OnTreeNodeChecked();"

        ID="staticTree"

        runat="server"

        ExpandDepth="0"

        ShowCheckBoxes="All"

        EnableClientScript="true"

        ShowExpandCollapse="true"

        ShowLines="true"

        >

        <Nodes>

            <asp:TreeNode Text="Table of Contents"

            SelectAction="None">

                   

                <asp:TreeNode Text="Chapter One">

               

                    <asp:TreeNode Text="Section 1.0">

                   

                        <asp:TreeNode Text="Topic 1.0.1"/>

                        <asp:TreeNode Text="Topic 1.0.2"/>

                        <asp:TreeNode Text="Topic 1.0.3"/>

                   

                    </asp:TreeNode>

                   

                    <asp:TreeNode Text="Section 1.1">

                   

                        <asp:TreeNode Text="Topic 1.1.1"/>

                        <asp:TreeNode Text="Topic 1.1.2"/>

                        <asp:TreeNode Text="Topic 1.1.3"/>

                        <asp:TreeNode Text="Topic 1.1.4"/>

                   

                    </asp:TreeNode>

               

                </asp:TreeNode>

               

                <asp:TreeNode Text="Chapter Two">

               

                    <asp:TreeNode Text="Section 2.0">

                   

                        <asp:TreeNode Text="Topic 2.0.1"/>

                        <asp:TreeNode Text="Topic 2.0.2"/>

                   

                    </asp:TreeNode>

               

                </asp:TreeNode>

               

            </asp:TreeNode>

            <asp:TreeNode Text="Appendix A" />

            <asp:TreeNode Text="Appendix B" />

            <asp:TreeNode Text="Appendix C" />

        </Nodes>

    </asp:TreeView>

    </div>

    </form>

</body>

</html>


필요한걸 사용하시면 될듯하네요 ..


=========================

Visual C# MVP Freecoder

http://freecoder.pe.kr

=========================

Posted by 알이씨


요구사항 : 사용자가 웹에서 본 데이터를 특정 포멧에 맞추어 엑셀 파일로 저장
조건 : 사용자가 보는 데이터 포멧은 일정하다. 즉 데이터 개수만 다를 뿐 그 항목은 같다.
준비사항 : 엑셀 .COM 컴퍼넌트를 가져와야 함(즉 서버측에 엑셀이 일단 설치가 되어 있어야 함)

Visual Studio 2005 메뉴에서 다음 과정을 거침
Website - 참조 추가 - COM 탭으로 이동
Microsoft Excel x.x Object Library 선택

특정 파일을 읽어와서 수정 후 다른 이름으로 저장하는 소스
==============================================================================
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Excel = Microsoft.Office.Interop.Excel;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open("e:\\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing); // test.xls 파일을 열어서

        Excel.Sheets excelSheets = excelWorkbook.Worksheets;
        string currentSheet = "Sheet1";
        Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
        Excel.Range range;
        range = excelWorksheet.get_Range("A1", Type.Missing); // A1 위치에

        range.set_Value(Type.Missing, "요거이 테스트");  // 데이터를 삽입

        excelWorkbook.SaveAs("e:\\copy_test.xls", Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive,
Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing); // 다른 이름으로 저장
        excelApp.Quit(); // 프로그램 종료
    }
}


Posted by 알이씨


단순 예제

int aa = 3;
str = String.Format("{0:000}", aa);

결과 : 003

UInt32 aa = 10;
string s = String.Format("{0:X3}", aa);

결과 00A

UInt32 aa = 10;
string s = String.Format("{0:x3}", aa);

결과 00a
Posted by 알이씨


MSDN을 검색하다 굉장히 유용(?) 할것 같은 예제가 있길래 퍼왔다.
출저는 발켰으니 괜찮겠지.. 친절하게 MSDN에 소스 복사하기까지 있으니까 ㅡㅡ;


// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
// Store the output of the String.Format method in a string.
    string s = "";

    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    s = String.Format(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);
    Console.WriteLine(s);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    s = String.Format(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal sortable: . . . {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);
    Console.WriteLine(s);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    s = String.Format(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);      
    Console.WriteLine(s);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

Posted by 알이씨


아래와 같이 char배열에서 string으로 string에서 char로 형변환 할 수 있다.
보너스는 char 배열 넘기기~ (복사해서 넘긴다. 주소를 넘기려면 ref를 사용)

string str = "12345";
char[] temp_str;
temp_str = str.ToCharArray(); //  string -> char []
Rcv_Char_arr(temp_str);

protected void Rcv_Char_arr(char[] arr)
{
    string str = new string(arr); // char[] -> string
}
Posted by 알이씨



목표

특정 이미지를 클릭하면 다른 이미지로 변경되고 다시 클릭하면 원래 이미지로 돌아오는 토글 형식의 이벤트를 구현, 단 해당 컨트롤은 서버쪽에서도 접근 가능해야 함


준비
이미지 컨트롤은 asp .net의 이미지 컨트롤을 사용하지 않고 html 컨트롤을 사용한다. 적당한 위치에 이미니 컨트롤을 추가

<span style="cursor:hand" onclick="return Test_Change_Img('Test_Img');">       
        <img src = "img/small-sphere-green.bmp" runat="server" alt="" id= "Test_Img" name = "Test_Img" style="border-width: 0" enableviewstate="false" /></span>

초기 이미지는 img 폴더의 small-sphere-green.bmp 로 설정하였다.


구현

함수를 호출하는 곳에서 해당 이미지의 이름을 함께 넘겨준다. 함수 구현부에서는 컨트롤 이름을 통해 이미지의 url을 알아내고 해당 url을 비교하여 토글링에 이용한다.

주의 : 이미지 src에는 full url이 들어가 있다 따라서 이미지 파일 이름만 얻어오기 위해 몇가지 string 관련 함수를 이용하였다.

function Test_Change_Img(){   
    var str = document[Test_Change_Img.arguments[0]].src;   
    var str_index = str.[각주:1]lastIndexOf("/");
    var img_src_str = str.[각주:2]slice(str_index+1, str.length);    
   
    if(img_src_str == "small-sphere-red.bmp"){
        document[Test_Change_Img.arguments[0]].src = "img/small-sphere-green.bmp";
    }else{
        document[Test_Change_Img.arguments[0]].src = "img/small-sphere-red.bmp";
    }   
}


비하인드 코드(*.cs)에서는 다음과 같이 이미지 컨트롤에 접근할 수 있다.

Test_Img.Src = "img/small-sphere-red.bmp";
  1. 매개변수 스트링이 나타나는 마지막 위치 인덱스 반환 [본문으로]
  2. 문자열의 특정 위치부터 특정 위치까지를 반환 [본문으로]
Posted by 알이씨


주의 : FileUpload 컴퍼넌트 추가 후 사용
참고 : 같은 이름의 파일이 존재할 경우 "filename_x.ext" 형식으로 파일을 업로드 함

========= 파일 업로드 ==========
        if (FileUpload1.HasFile)
        {
            string upDir = "E:\\Study\\Web\\EmsClient\\Upload\\";
            DirectoryInfo di = new DirectoryInfo(upDir);
            if (!di.Exists)
                di.Create();

            string fName = FileUpload1.FileName;
            string fFullName = upDir + fName;

            FileInfo fInfo = new FileInfo(fFullName);
            if (fInfo.Exists)
            {

                int fIndex = 0;
                string fExtension = fInfo.Extension;
                string fRealName = fName.Replace(fExtension, "");

                string newFileName = "";
                do
                {
                    fIndex++;
                    newFileName = fRealName + "_" + fIndex.ToString() + fExtension;
                    fInfo = new FileInfo(upDir + newFileName);
                } while (fInfo.Exists);

                fFullName = upDir + newFileName;
            }

            FileUpload1.PostedFile.SaveAs(fFullName);
            Label1.Text = "업로드 된 파일 : " + fFullName;
        }
        else
        {
            Label1.Text = "업로드 된 파일이 존재하지 않습니다.";
        }

Posted by 알이씨


Timer aTimer = new Timer();

// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

// Set the Interval to 5 seconds (5000 milliseconds).
aTimer.Interval = 5000;
aTimer.Enabled = true;

void OnTimedEvent(object source, ElapsedEventArgs e)
{
    // Todo:: 할일...        
}

Posted by 알이씨

티스토리 툴바