Hiển thị các bài đăng có nhãn Coding. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Coding. Hiển thị tất cả bài đăng

Thứ Tư, 1 tháng 4, 2009

Truyền giá trị từ Page cho User Control

Trong bài viết này chúng ta sẽ xem xét chi tiết các bước xử lý cho việc tạo ra, thiết lập và lấy lại các thuộc tính của User Control như thế nào. Có thể bạn đã tình cờ gặp trường hợp mà bạn cần truyền các giá trị từ trong trang .aspx của bạn đến một điều...

Trong bài viết này chúng ta sẽ xem xét chi tiết các bước xử lý cho việc tạo ra, thiết lập và lấy lại các thuộc tính của User Control như thế nào.

Có thể bạn đã tình cờ gặp trường hợp mà bạn cần truyền các giá trị từ trong trang .aspx của bạn đến một điều khiển User Control (.ascx). Tình huống này có thể có một số cách thức giải quyết với việc lưu giá trị vào trong session hay database và sau đó lấy giá trị đó ra truyền vào cho User Control.

Tuy nhiên, có một cách dễ dàng và tối ứu nhất hơn cả là tạo các thuộc tính của User Control đó và thiết lập các thuộc tính đó ở trong trang .aspx và có truy cập nó từ User Control.

Tạo User Control (Person.ascx)

Dưới đây là mã cho điều khiển User Control

view plainprint?

1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Person.ascx.cs"
2. Inherits="UserControl_Person" %>
3.

4.

5. This is the User Control text.

6. First Name:

7. Last Name:

8. Age:
9.

10.


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Person.ascx.cs" Inherits="UserControl_Person" %>
This is the User Control text.
First Name:
Last Name:
Age:


Trong đoạn mã này, chúng ta đặt vào đó 3 Label cho các thuộc tính FirstName, LastName và Age. Chúng ta sẽ gán các giá trị của các Label từ phía server (aspx.cs) hoặc là trên trang .aspx sau đó.

Đây sẽ là đoạn mã code behind cho phần User Control:

view plainprint?

1. private string m_FirstName = string.Empty;
2. private string m_LastName = string.Empty;
3. private int m_Age = 0;
4. # region Properties
5. public string FirstName
6. {
7. get { return m_FirstName; }
8. set { m_FirstName = value; }
9. }
10. public string LastName
11. {
12. get { return m_LastName; }
13. set { m_LastName = value; }
14. }
15. public int Age
16. {
17. get { return m_Age; }
18. set { m_Age = value; }
19. }
20. #endregion Properties
21. protected void Page_Load(object sender, EventArgs e)
22. {
23. if (!IsPostBack)
24. {
25. lblFirstName.Text = m_FirstName;
26. lblLastName.Text = m_LastName;
27. lblAge.Text = m_Age.ToString();
28. }
29. }

private string m_FirstName = string.Empty; private string m_LastName = string.Empty; private int m_Age = 0; # region Properties public string FirstName { get { return m_FirstName; } set { m_FirstName = value; } } public string LastName { get { return m_LastName; } set { m_LastName = value; } } public int Age { get { return m_Age; } set { m_Age = value; } } #endregion Properties protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblFirstName.Text = m_FirstName; lblLastName.Text = m_LastName; lblAge.Text = m_Age.ToString(); } }

Trong đoạn mã này, chúng ta khai báo ba biến cho các thuộc tính FirstName, LastName, và Age tương ứng. Ở đây bạn phải tạo ra ba thuộc tính như là việc khai báo các thuộc tính trong một file class vì thực tế User Control cũng chỉ là một class mà thôi.

Trong phương thức Page_Load, chúng ta kiểm tra với phương thức IsPostBack và thiết lập thuộc tính Text cho các biến tương ứng.
Tạo trang .aspx (default.aspx)

Trong trang này chúng ta sẽ gọi User Control mà chúng ta đã tạo ra ở trên. Đây là đoạn mã thực hiện điều đó:

view plainprint?

1.
2.

Demo: Setting properties of user control from server side/.aspx page


3.

Demo: Setting properties of user control from server side/.aspx page



Bạn có thể nhận thấy trong phần mã ở trên, chúng ta đã thiết lập các thuộc tính của chính User Control này. Bạn có thể thực hiện theo cách mà bạn chỉ ra các thuộc tính của User Control vào trong trang .aspx hoặc là trong file .aspx.cs. Một điều thú vị ở đây là cả hai trường hợp bạn sẽ nhận được phần gợi ý thuộc tính mà bạn đã tạo ra cho User Control đó.

Dưới đây là phần mã cho trang .aspx

view plainprint?

1. protected void Page_Load(object sender, EventArgs e)
2. {
3. if (!IsPostBack)
4. SetProperties();
5. }
6. private void SetProperties()
7. {
8. Person1.FirstName = "Sheo";
9. Person1.LastName = "Narayan";
10. Person1.Age = 20;
11. }

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) SetProperties(); } private void SetProperties() { Person1.FirstName = "Sheo"; Person1.LastName = "Narayan"; Person1.Age = 20; }

Trong đoạn mã này bàn đã thiết lập các thuộc tính của User Control trong sự kiện Page_Load sau khi kiểm tra điều kiện có phải là Not IsPostBack

Bây giờ bạn đã có mọi thứ rồi đó. Chỉ việc chạy nó và bạn sẽ thấy rằng thật là dễ dàng làm sao để có thể truyền giá trị từ trong trang .aspx của bạn vào trong các User Control.

Tạo file MS Excel từ GridView

Bài viết này sẽ hướng dẫn cho bạn cách làm thế nào để tạo ra bảng tính MS Excel từ biểu mẫu báo cáo được cung cấp cho người dùng trong GridView . .aspx page Trước tiên chúng ta cần tạo ra một trang .aspx mà trong đó có GridView và có dữ liệu được hiển...

Bài viết này sẽ hướng dẫn cho bạn cách làm thế nào để tạo ra bảng tính MS Excel từ biểu mẫu báo cáo được cung cấp cho người dùng trong GridView.
.aspx page

Trước tiên chúng ta cần tạo ra một trang .aspx mà trong đó có GridView và có dữ liệu được hiển thị trong đó.

view plainprint?

1.
2.

3.




Bây giờ chúng ta phải viết mã để đưa ra GridView, trong ví dụ này chúng ta sử dụng một file .xml để cung cấp dữ liệu cho GridView.
.xml file là datasource của GridView.

view plainprint?

1.
2.
3.

4. Sheo
5. Narayan
6.
Aurangabad, Bihar

7. Job
8.

9.

10. Vijay
11. Bandaru
12.
Hyderabad, AP

13. Software Professoinal
14.

15.

16. Sannat
17. Digar
18.
Sanat Nagar, Orrisa

19. Job
20.

21.

22. Suraj
23. Singh
24.
Suraj Singh Nagar, Delhi

25. Businessman
26.

27.


Sheo Narayan
Aurangabad, Bihar
Job
Vijay Bandaru
Hyderabad, AP
Software Professoinal
Sannat Digar
Sanat Nagar, Orrisa
Job
Suraj Singh
Suraj Singh Nagar, Delhi
Businessman

.cs file

Bây giờ, chúng ta sẽ viết mã để đưa ra GridView trong sự kiện !IsPostBack của Page_Load

view plainprint?

1. DataSet dSet = new DataSet();
2. string fileName = Server.MapPath("~/GridData.xml");
3. dSet.ReadXml(fileName);
4. GridView1.DataSource = dSet.Tables[0].DefaultView;
5. GridView1.DataBind();
6. dSet.Dispose();

DataSet dSet = new DataSet(); string fileName = Server.MapPath("~/GridData.xml"); dSet.ReadXml(fileName); GridView1.DataSource = dSet.Tables[0].DefaultView; GridView1.DataBind(); dSet.Dispose();


Bây giờ GridView của chúng ta đã tạo ra có chứa dữ liệu. Việc chính của chúng ta ở đây đó là xuất GridView này ra file MS Excel, và điều này sẽ được thực hiện trong sự kiện click của nút [Generate Excel File from GridView]
.
Để làm được với phần mã sau đây bạn cần đưa thêm vào các dòng mã sau ở phần đầu của file .cs

view plainprint?

1. using System.IO;
2. using System.Text;

using System.IO; using System.Text;

Đây là mã cho sự kiện nhấn nút:

view plainprint?

1. string attachment = "attachment; filename=GridViewExport.xls";
2. Response.ClearContent();
3. Response.AddHeader("content-disposition", attachment);
4. Response.ContentType = "application/ms-excel";
5. StringWriter sWriter = new StringWriter();
6. HtmlTextWriter htwWriter = new HtmlTextWriter(sWriter);
7. GridView1.RenderControl(htwWriter);
8. Response.Write(sWriter.ToString());
9. Response.End();

string attachment = "attachment; filename=GridViewExport.xls"; Response.ClearContent(); Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/ms-excel"; StringWriter sWriter = new StringWriter(); HtmlTextWriter htwWriter = new HtmlTextWriter(sWriter); GridView1.RenderControl(htwWriter); Response.Write(sWriter.ToString()); Response.End();
Kiểm tra

Đến giờ mọi thứ đã sẵn sàng cho việc kiểm tra, nhưng hãy đợi chút đã. Khi bạn nhấn nút bạn sẽ nhận được một lỗi :

"Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server.".

Để tránh được lỗi này, bạn chỉ cần thêm vào phương thức sau đâu trong file .cs

view plainprint?

1. public override void VerifyRenderingInServerForm(Control control)
2. {
3. }

public override void VerifyRenderingInServerForm(Control control) { }
Kết quả

Bây giờ bạn đã có đủ các thứ trong trang của bạn, hãy tiếp tục và nhấn vào nút đi. Nó sẽ hỏi yêu cầu bạn xem có định Open hoặc là Save lại file MS Excel này không.

That's it!!!SmileSmileSmile

Thiết lập Windows Hook trong VC#.NET

Bài viết này sẽ hướng dẫn cho bạn cách làm thế nào để thiết lập cách móc nối chuột và tới sự kiện chuột trên màn hình. Cách thực hiện gồm các bước như sau: Để thiết lập một móc nối ta gọi tới hàm SetWindowsHookEx từ User32.dll . Hàm này thiết đặt một...

Bài viết này sẽ hướng dẫn cho bạn cách làm thế nào để thiết lập cách móc nối chuột và tới sự kiện chuột trên màn hình. Cách thực hiện gồm các bước như sau:

Để thiết lập một móc nối ta gọi tới hàm SetWindowsHookEx từ User32.dll. Hàm này thiết đặt một thủ tục móc được định nghĩa bởi ứng dụng trong hệ thống móc nối.

Bước 1:

Khởi động Microsoft Visual Studio .NET

Bước 2:

Chọn File từ menu, chọn New, và click Project.

Bước 3:

Trong New Project , click Visual C# Project và chọn Windown Application .

Bước 4:

Sau đó thêm dòng sau vào Form1.cs
  1. using System.Runtime.InteropServices;

Bước 5:

Thêm mã sau đây trong lớp Form1
  1. public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
  2. //Declare the hook handle as an int.
  3. static int hHook = 0;
  4. //Declare the mouse hook constant.
  5. //For other hook types, you can obtain these values from Winuser.h in the Microsoft SDK.
  6. public const int WH_MOUSE = 7;
  7. private System.Windows.Forms.Button button1;
  8. //Declare MouseHookProcedure as a HookProc type.
  9. HookProc MouseHookProcedure;
  10. //Declare the wrapper managed POINT class.
  11. [StructLayout(LayoutKind.Sequential)]
  12. public class POINT
  13. {
  14. public int x;
  15. public int y;
  16. }
  17. //Declare the wrapper managed MouseHookStruct class.
  18. [StructLayout(LayoutKind.Sequential)]
  19. public class MouseHookStruct
  20. {
  21. public POINT pt;
  22. public int hwnd;
  23. public int wHitTestCode;
  24. public int dwExtraInfo;
  25. }
  26. //This is the Import for the SetWindowsHookEx function.
  27. //Use this function to install a thread-specific hook.
  28. [DllImport("user32.dll",CharSet=CharSet.Auto,
  29. CallingConvention=CallingConvention.StdCall)]
  30. public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,
  31. IntPtr hInstance, int threadId);
  32. //This is the Import for the UnhookWindowsHookEx function.
  33. //Call this function to uninstall the hook.
  34. [DllImport("user32.dll",CharSet=CharSet.Auto,
  35. CallingConvention=CallingConvention.StdCall)]
  36. public static extern bool UnhookWindowsHookEx(int idHook);
  37. //This is the Import for the CallNextHookEx function.
  38. //Use this function to pass the hook information to the next hook procedure in chain.
  39. [DllImport("user32.dll",CharSet=CharSet.Auto,
  40. CallingConvention=CallingConvention.StdCall)]
  41. public static extern int CallNextHookEx(int idHook, int nCode,
  42. IntPtr wParam, IntPtr lParam);

Bước 6:

Kéo thêm một button lên form và thêm mã sau đây trong thủ tục Button1_click
  1. private void button1_Click(object sender, System.EventArgs e)
  2. {
  3. if(hHook == 0)
  4. {
  5. // Create an instance of HookProc.
  6. MouseHookProcedure = new HookProc(Form1.MouseHookProc);
  7. hHook = SetWindowsHookEx(WH_MOUSE,
  8. MouseHookProcedure,
  9. (IntPtr)0,
  10. AppDomain.GetCurrentThreadId());
  11. //If the SetWindowsHookEx function fails.
  12. if(hHook == 0 )
  13. {
  14. MessageBox.Show("SetWindowsHookEx Failed");
  15. return;
  16. }
  17. button1.Text = "UnHook Windows Hook";
  18. }
  19. else
  20. {
  21. bool ret = UnhookWindowsHookEx(hHook);
  22. //If the UnhookWindowsHookEx function fails.
  23. if(ret == false )
  24. {
  25. MessageBox.Show("UnhookWindowsHookEx Failed");
  26. return;
  27. }
  28. hHook = 0;
  29. button1.Text = "Set Windows Hook";
  30. this.Text = "Mouse Hook";
  31. }
  32. }

Bước 7:

Thêm mã sau cho hàm MouseHookProc trong class Form1
  1. public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
  2. {
  3. //Marshall the data from the callback.
  4. MouseHookStruct MyMouseHookStruct = (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
  5. if (nCode <>
  6. {
  7. return CallNextHookEx(hHook, nCode, wParam, lParam);
  8. }
  9. else
  10. {
  11. //Create a string variable that shows the current mouse coordinates.
  12. String strCaption = "x = " +
  13. MyMouseHookStruct.pt.x.ToString("d") + " y = " +
  14. MyMouseHookStruct.pt.y.ToString("d");
  15. //You must get the active form because it is a static function.
  16. Form tempForm = Form.ActiveForm;
  17. //Set the caption of the form.
  18. tempForm.Text = strCaption;
  19. return CallNextHookEx(hHook, nCode, wParam, lParam);
  20. }
  21. }

Có thể dùng if để thay thế:

  1. protected override bool ProcessDialogKey(Keys keyData)
  2. {
  3. if (keyData == (Keys.Alt | Keys.D))
  4. {
  5. MessageBox.Show("Welcome HotKey");
  6. return true;
  7. }
  8. else return false;
  9. }

Với những ứng dụng không cần tới việc can thiệp quá sâu vào xử lý của windows bằng kỹ thuật Hook, thì đây sẽ là kỹ thuật tốt để bạn sử dụng.

Đọc dữ liệu từ file Excel với C#

Bài viết này sẽ hướng dẫn các bạn cách làm sao để đọc dữ liệu từ file Excel . Giới thiệu Ứng dụng Excel đã trở thành ứng dụng không thể thiếu đối với người làm văn phòng, đặc biệt là các nhân viên kế toán. Và đó cũng chính là vấn đề khi doanh nghiệp của...

Bài viết này sẽ hướng dẫn các bạn cách làm sao để đọc dữ liệu từ file Excel.

Giới thiệu

Ứng dụng Excel đã trở thành ứng dụng không thể thiếu đối với người làm văn phòng, đặc biệt là các nhân viên kế toán. Và đó cũng chính là vấn đề khi doanh nghiệp của bạn sử dụng một phần mềm khác không giao tiếp với Excel. Chúng ta sẽ từng bước giải quyết các vấn đề này.

Qui tắc

Về nguyên tắc, việc đọc dữ liệu từ Excel giống như việc đọc dữ liệu từ CSDL. Bạn hãy hình dung một file Excel là một database, như thế mỗi Worksheet là một table dữ liệu.

Vậy chúng ta chỉ cần lập lại những qui tắc kết nối đến CSDL để áp dụng cho việc kết nối và đọc, ghi dữ liệu từ file Excel.

Thực hiện

Dưới đây là hai hàm làm việc với Excel. GetSheetData là hàm lấy về dữ liệu của một Worksheet trong file Excel.

  1. static DataTable GetSheetData(string excelFile, int sheetindex){
  2. string sheetname = GetExcelSheetNames(excelFile)[sheetindex];
  3. string srcConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + @";Extended Properties=""Excel 8.0;HDR=YES;""";
  4. string srcQuery = "Select * from [" + sheetname + "]";
  5. OleDbConnection srcConn = new OleDbConnection(srcConnString);
  6. srcConn.Open();
  7. OleDbCommand objCmdSelect = new OleDbCommand(srcQuery, srcConn);
  8. DataSet ds = new DataSet();
  9. OleDbDataAdapter da = new OleDbDataAdapter(objCmdSelect);
  10. da.Fill(ds, sheetname);
  11. srcConn.Close();
  12. return ds.Tables[0];
  13. }

Và sau đây là hàm lấy về tập hợp tên của những Sheets tồn tại trong file Excel.

  1. static String[] GetExcelSheetNames(string excelFile)
  2. {
  3. OleDbConnection objConn = null;
  4. System.Data.DataTable dt = null;
  5. try
  6. {
  7. // Connection String. Change the excel file to the file you
  8. // will search.
  9. String connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
  10. "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;";
  11. // Create connection object by using the preceding connection string. objConn = new OleDbConnection(connString);
  12. // Mở kết nối đến CSDL
  13. objConn.Open();
  14. // Lấy về dữ liệu
  15. dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
  16. if (dt == null)
  17. {
  18. return null;
  19. }
  20. String[] excelSheets = new String[dt.Rows.Count];
  21. int i = 0;
  22. // Add the sheet name to the string array.
  23. foreach (DataRow row in dt.Rows)
  24. {
  25. excelSheets"http://hp-aptech.edu.vn/emoticons/emotion-55.gif" alt="Idea" /> = row["TABLE_NAME"].ToString();
  26. i++;
  27. }
  28. return excelSheets;
  29. }
  30. catch (Exception ex)
  31. {
  32. return null;
  33. }
  34. finally
  35. {
  36. // Clean up.
  37. if (objConn != null)
  38. {
  39. objConn.Close();
  40. objConn.Dispose();
  41. }
  42. if (dt != null)
  43. {
  44. dt.Dispose();
  45. }
  46. }
  47. }

Ở cả hai hàm, thì chúng ta có thể dễ dàng nhận thấy các bước để kết nối đến file Excel giống như việc kết nối đến CSDL MySQL hoặc MSSQL...

Các bước kết nối

- Khai báo ConnectionString:

  1. String connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
  2. "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;";

Ở đây Data Source chính là đường dẫn và tên file Excel.

- Tạo kết nối và mở kết nối

  1. OleDbConnection objConn = new OleDbConnection(connString);
  2. objConn.Open();

- Lấy dữ liệu

  1. DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

Kết luận

Khi làm việc với Excel, bạn hãy nhớ nguyên tắc như đã được nêu ở trên, chắc chắn bạn sẽ làm việc một cách trơn tru. Trên đây chỉ là 2 hàm ví dụ, hi vọng các bạn sẽ áp dụng và mở rộng trong các ứng dụng của bạn.

Ghi dữ liệu vào file Excel với C#

Bài viết này sẽ hướng dẫn cho bạn cách ghi dữ liệu vào một file Excel với C# như thế nào. Giới thiệu Việc ghi dữ liệu vào file Excel có hai phần: thêm mới và cập nhật. Cũng giống như việc lấy dữ liệu từ file Excel việc ghi dữ liệu vào một file Excel được...

Bài viết này sẽ hướng dẫn cho bạn cách ghi dữ liệu vào một file Excel với C# như thế nào.

Giới thiệu

Việc ghi dữ liệu vào file Excel có hai phần: thêm mới và cập nhật.

Cũng giống như việc lấy dữ liệu từ file Excel việc ghi dữ liệu vào một file Excel được thực hiện theo những bước tương tự.

Ta sẽ dùng một biết string để lưu trữ thông số kết nối

  1. string sheetname = "MySheet$";
  2. string srcConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + @";Extended Properties=""Excel 8.0;HDR=YES;""";

Thêm mới dữ liệu vào file Excel

Đoan mã lệnh sau là ví dụ để bạn có thể thực hiện việc thêm mới dữ liệu vào file Excel.

  1. OleDbConnection objConn = null;
  2. objConn = new OleDbConnection(connString);
  3. objConn.Open();
  4. OleDbCommand cmd = new OleDbCommand("insert into [" + sheetname + "] (ID,Name,Desc) values (1,\"test\",\"test data\",objConn)";
  5. cmd.ExecuteNonQuery();

Nhìn vào đoạn mã lệnh trên chúng ta có thể thấy việc thêm mới dữ liệu vào file Excel, giống như việc lấy dữ liệu, được thực hiện như các bước khi làm việc với các hệ quản trị cơ sở dữ liệu như MySQL, SQL Server, Oracle...

Cập nhật dữ liệu vào file Excel.

Tương tự như việc thêm mới dữ liệu, việc cập nhật dữ liệu vào file Excel được thực hiện theo những bước tương tự.

Đoạn mã lệnh sau đây giúp bạn thực hiện.

  1. OleDbConnection objConn = null;
  2. objConn = new OleDbConnection(connString);
  3. objConn.Open();
  4. OleDbCommand cmd = new OleDbCommand("update [" + sheetname + "] set Name=\"test\" where ID=1",objConn)";
  5. cmd.ExecuteNonQuery();

Kết luận

Với các đoạn mã lệnh trên, các bạn có thể nâng cấp và sử đổi để phù hợp với ứng dụng và nhu cầu của bạn. Và tốc độ truy xuất tới Excel sẽ đạt hiệu quả tốt nhất.

Các bạn hãy nhớ nguyên tắc căn bản của việc giao tiếp với Excel tương tự như với các hệ CSDL. Chỉ cần nhớ nguyên tắc này, bạn sẽ giải quyết được tất cả các tình huống với Excel.

Tạo biểu đồ xem dung lượng ổ cứng

Bài viết này hướng dẫn bạn cách tạo ra một ứng dụng biểu đồ dùng để hiện thị dung lượng của các ổ cứng như thế nào. Các namespace được sử dụng như sau: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System...

Bài viết này hướng dẫn bạn cách tạo ra một ứng dụng biểu đồ dùng để hiện thị dung lượng của các ổ cứng như thế nào.

Các namespace được sử dụng như sau:

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.IO;
  6. using System.Windows.Forms;
  7. using System.Data;

Các cấu trúc sử dụng:

  1. struct MyDirTotalSize
  2. {
  3. public string dirPath;
  4. public long totalSize;
  5. public int parent;
  6. }
  7. struct MyAngleStruct
  8. {
  9. public string folderpath;
  10. public float myAngle;
  11. public long mySize;
  12. }

Hàm dưới đây đảm nhiệm việc tạo ra các góc cho mỗi đường dẫn thư mục:

  1. private void GeneratePieChartAngle(string path)
  2. {
  3. MyAngleStruct angStructObj;
  4. angStructObj.myAngle = 0;
  5. MyDirTotalSize eff;
  6. long opteller = 0, compsize = 0;
  7. int startingPoint = -1, startingPoint2;
  8. for (startingPoint2 = 0; startingPoint2 <>
  9. {
  10. eff = (MyDirTotalSize) (SizeDir[startingPoint2]);
  11. if (path != eff.dirPath) continue;
  12. compsize += eff.totalSize;
  13. angStructObj.folderpath = eff.dirPath;
  14. angStructObj.mySize = eff.totalSize;
  15. AngleS.Add(angStructObj);
  16. startingPoint = eff.parent;
  17. }
  18. foreach (MyDirTotalSize ef in SizeDir)
  19. {
  20. if (ef.dirPath.CompareTo(path) == 0 || startingPoint <>continue;
  21. if (!ef.dirPath.StartsWith(path)) continue;
  22. compsize += ef.totalSize;
  23. startingPoint2 = ef.parent;
  24. opteller += ef.totalSize;
  25. if (startingPoint2 > (startingPoint + 1)) continue;
  26. angStructObj.folderpath = ef.dirPath;
  27. angStructObj.mySize = opteller;
  28. AngleS.Add(angStructObj);
  29. opteller = 0; //ef.size;
  30. }
  31. startingPoint = AngleS.Count;
  32. for (startingPoint2 = 0; startingPoint2 <>
  33. {
  34. angStructObj = (MyAngleStruct) (AngleS[startingPoint2]);
  35. AngleS.RemoveAt(startingPoint2);
  36. angStructObj.myAngle = (angStructObj.mySize/(float) compsize)*360;
  37. AngleS.Insert(startingPoint2, angStructObj);
  38. }
  39. }

Vẽ các góc biểu đồ hình tròn từ các vị trí bắt đầu và kết thúc

  1. private void DrawPitotal1romAngles()
  2. {
  3. float realAngle=0F;
  4. Random rnd = new Random();
  5. Red=Green=Blue=0;
  6. pas.Clear(BackColor);
  7. foreach(MyAngleStruct total1 in AngleS)
  8. {
  9. pas.FillPie(brus,rRect,realAngle,total1.myAngle);realAngle+=total1.myAngle;
  10. //Generate random color for drawing
  11. int myRed = myGreen = myBlue = Random() % 250;
  12. brus.Color = System.Drawing.Color.FromArgb(myRed,myGreen,myBlue);
  13. }
  14. }

Kết quả thu được như sau:

Tạo Flash Screen cho ứng dụng C#

Bài viết này hướng dẫn cho các bạn mới làm quen với C# một cách làm màn hình khởi động cho ứng dụng (splash screen) như thế nào. Để tạo Flash Screen bên Visual Basic đã có hổ trợ sẵn còn bên C# không có, chúng ta phải làm sao cho nó có nhỉ .??? Bài viết...

Bài viết này hướng dẫn cho các bạn mới làm quen với C# một cách làm màn hình khởi động cho ứng dụng (splash screen) như thế nào.

Để tạo Flash Screen bên Visual Basic đã có hổ trợ sẵn còn bên C# không có, chúng ta phải làm sao cho nó có nhỉ .??? Bài viết sẽ hướng dẫn các bạn cách tạo ra một Flash Screen trong C#.

Các bạn phải chuẩn bị trước một tấm hình để tạo ra Flash Screen.

Đầu tiên các bạn chỉnh form1 để chúng ta lấy nó tạo thành Flash Screen.


Sau đó chúng ta kéo vào một PictureBox và chọn Image cho nó. Ta có tấm hình như sau:

Bên form2 chúng ta sẽ code nó.

Kéo thêm đối tượng Timer cho form1 và chúng ta sẽ để Interval cho nó là 5000 (5 giây). Code cho sự kiện Load của form1:


Bên form2 chúng ta sẽ gọi form1 show lên.

Trong file Program.cs chúng ta sẽ chỉnh lại Runform2


Giờ Ctrl + F5 và chờ đợi kết quả.

Lấy dữ liệu từ một trang popup

Bài viết này sẽ hướng dẫn bạn cách lấy giá trị từ một trang popup của một trang web để trả về cho trang sinh ra nó như thế nào. Các bước tiến hành như sau: Trong trang thứ nhất, chúng ta gọi là trang Parent.html có chức năng sinh ra một trang con (popup...

Bài viết này sẽ hướng dẫn bạn cách lấy giá trị từ một trang popup của một trang web để trả về cho trang sinh ra nó như thế nào.

Các bước tiến hành như sau:

Trong trang thứ nhất, chúng ta gọi là trang Parent.html có chức năng sinh ra một trang con (popup form). Trong trang này chúng ta chỉ có một nút như sau:

Nút này sẽ gọi đến hàm ShowDialog() khi được nhấn để gọi ra trang thứ hai. Đây là mã lệnh của trang Parent.html:

  1. Parent
  2. "parentDiv">
  3. 'button' name = 'button' value='Hiển thị Popup' onclick='ShowDialog();'>

Trong đoạn mã trên, chúng ta có một thẻ div có thuộc tính idparentDiv dùng để nhận giá trị sẽ được lấy về từ trang con sẽ sinh ra khi nhấn nút.

Ở trang thứ hai, là trang sẽ được mở ra khi nhấn nút trong trang Parent.html, được thiết kế gồm có một một thẻ div chứa nội dung cần lấy giá trị và một nút để thực hiện truyền giá trị này cho trang Parent.html

Mã lệnh trong trang Child.html như sau:

  1. "childDiv">Hi, hello, I'm APTECH
  2. button' name = 'button' value='Done' onclick=Done();'>

Mọi thẻ HTML nếu có id thì đều có thể tìm đến nó để thao tác thông qua một DOM object có tên là document (sử dụng phương thức getElementById()). Để lấy hoặc thiết lập nội dung của thẻ đó, ta sử dụng thuộc tính innerHTML. Còn opener là đối tượng của cửa sổ cha tương ứng với trang Parent.html

Kết quả nhận được khi nhấn nút Done từ trang Child.html như sau

Upload nhiều file XML vào cột dữ liệu XML

Bài viết này sẽ thảo luận đến việc làm thế nào để upload nhiều file (đặc biệt là file XML) vào cột kiểu dữ liệu XML của cơ sở dữ liệu SQL Server. Bước 1: Phải đảm bảo xp_cmdshell đã được cho phép. Nếu chưa được, hãy thực thi một số câu lệnh dưới đây use...

Bài viết này sẽ thảo luận đến việc làm thế nào để upload nhiều file (đặc biệt là file XML) vào cột kiểu dữ liệu XML của cơ sở dữ liệu SQL Server.

Bước 1:

Phải đảm bảo xp_cmdshell đã được cho phép. Nếu chưa được, hãy thực thi một số câu lệnh dưới đây
  1. use master
  2. go
  3. sp_configure 'show advanced options',1
  4. go
  5. reconfigure with override
  6. go
  7. sp_configure 'xp_cmdshell',1
  8. go
  9. reconfigure with override
  10. go

Bước 2:

Tạo một CSDL và bảng được dùng cho việc import này bằng các câu lệnh dưới. Nếu không bạn có thể sử dụng CSDL đang có sẵn.
  1. USE [master]
  2. GO
  3. /****** Object: Database [XMLTest]
  4. Script Date: 04/17/2007 01:49:43 ******/
  5. IF EXISTS (SELECT name FROM sys.databases WHERE name = N'XMLTest')
  6. DROP DATABASE [XMLTest]
  7. go
  8. create database XMLTest
  9. go
  10. use XMLTest
  11. go

Bước 3:

Đảm bảo rằng bạn đã tạo một bảng với kiểu dữ liệu XML. Ngoài ra, hãy chắc chắn có ít nhất một cột trong bảng có thể chứa giá trị của tên file như sau
  1. use [XMLTest]
  2. /****** object: table [dbo].[myimage]
  3. script date: 09/10/2006 21:55:46 ******/
  4. if exists (select * from sys.objects
  5. where object_id = object_id(N'[MYXML]') and type in (N'u'))
  6. drop table [MYXML]
  7. go
  8. create table [MYXML] (
  9. [id] int identity(1,1),
  10. [XML File Name] varchar(100),
  11. [Data] XML)
  12. Go

Bước 4:

Giả sử bạn muốn upload toàn bộ file .bmp từ thư mục C:\XML vào bảng “MYXML” trong lược đồ “dbo” trên cơ sở dữ liệu “XMLTest

Nội dung ví dụ Customer.xml

  1. "1.0" standalone="yes"?>
  2. 2007-03-31T06:40:38.0000000-05:00
  3. Rainbow.River
  4. 1AE
  5. A-Accessible
  6. 761
  7. Stopped
  8. 30
  9. 2007-03-31T06:40:38.0000000-05:00
  10. Rainbow.River
  11. 1AE
  12. Not-Accessible
  13. 870
  14. Stopped
  15. 30
  16. 2007-03-31T06:40:38.0000000-05:00
  17. Rainbow.River
  18. 1AE
  19. A-Accessible
  20. 97F
  21. Started
  22. 30

Bước 5:

Hãy tạo một thủ tục usp_uploadXMLFilesm [sử dụng copy và paste đoạn mã dưới đây hoặc download file usp_uploadXMLFiles có sẵn]. Việc tạo này là tạo một thủ tục lưu trữ usp_uploadXMLfiles trên cơ sở dữ liệu chủ vì vậy nó có thể thực thi và gọi bất kỳ cơ sở dữ liệu nào.
  1. USE [master]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[usp_uploadXMLfiles] Script Date: 09/10/2006 23:33:34 ******/
  4. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_uploadXMLfiles]') AND type in (N'P', N'PC'))
  5. DROP PROCEDURE [dbo].[usp_uploadXMLfiles]
  6. go
  7. set quoted_identifier off
  8. go
  9. create procedure usp_uploadXMLfiles
  10. @databasename varchar(128),
  11. @schemaname varchar(128),
  12. @tablename varchar(128),
  13. @FileNameColumn varchar(128),
  14. @xmlcolumn varchar(128),
  15. @path varchar(500),
  16. @filetype varchar(10),
  17. @printorexec varchar(5) = 'print'
  18. as
  19. set nocount on
  20. declare @dircommand varchar(1500)
  21. declare @insertquery varchar(2000)
  22. declare @updatequery varchar(2000)
  23. declare @count int
  24. declare @maxcount int
  25. declare @filename varchar(500)
  26. set @count=1
  27. set @dircommand = 'dir /b '+@path+@filetype
  28. create table #dir (name varchar(1500))
  29. insert #dir(name) exec master..xp_cmdshell @dircommand
  30. delete from #dir where name is NULL
  31. create table #dir2 (id int identity(1,1),name varchar(1500))
  32. insert into #dir2 select name from #dir
  33. --select * from #dir2
  34. set @maxcount = ident_current('#dir2')
  35. print 'set quoted_identifier off'
  36. print 'go'
  37. while @count <=@maxcount
  38. begin
  39. set @filename =(select name from #dir2 where id = @count)
  40. set @insertquery = 'Insert into ['+@databasename+'].['+@schemaname+'].['+@tablename+']
  41. ([' +@filenamecolumn +']) values ("mailto:'+@filename+'%22)'
  42. set @updatequery = 'update ['+@databasename+'].['+@schemaname+'].['+@tablename+']
  43. set ['+@xmlcolumn+'] = (SELECT * FROM OPENROWSET(BULK "'+@path+@filename+'", SINGLE_BLOB)AS x )
  44. WHERE ['+@filenamecolumn +']="mailto:'+@filename+'%22'
  45. if @printorexec ='print'
  46. begin
  47. print @insertquery
  48. print @updatequery
  49. end
  50. if @printorexec ='exec'
  51. begin
  52. set @insertquery='set quoted_identifier off' + char(10)+char(13)+@insertquery
  53. set @updatequery='set quoted_identifier off' + char(10)+char(13)+@updatequery
  54. exec (@insertquery)
  55. exec (@updatequery)
  56. end
  57. set @count = @count +1
  58. end
  59. go

Thủ tục này chấp nhận các tham số sau:

@databasename = Tên của cơ sở dữ liệu có giản đồ và bảng đang tồn tại.

@schemaname = Giảm đồ cơ sở dữ liệu có bảng đang tồn tại

@tablename = Tên của bảng có các file sẽ được upload

@FileNameColumn = Tên của cột trong bảng có tên file để lưu trữ

@XMLcolumn = Cột kiểu dữ liệu XML hiện tại có file sẽ được lưu trữ như XML

@path = Đường dẫn của tất cả các file cần có để upload. Ví dụ “C:\Windows\”

@filetype = Loại file muốn upload. Ví dụ “*.XML”

@printorexec = Nếu “Print” được đặt như một tham số, nó sẽ tự tạo ra và hiển thị các lệnh. Nếu “Exec” được đặt như một tham số, nó sẽ ngay lập tức thực thi câu lệnh có ý nghĩa upload tất cả các file.

Bước 6:

Thực thi thủ tục với tham số printorexec=’print’ theo đoạn mã dưới đây
  1. Exec master..[usp_uploadXMLfiles]
  2. @databasename ='XMLTest',
  3. @schemaname ='dbo',
  4. @tablename ='MYXML',
  5. @FileNameColumn ='XML File Name',
  6. @XMLcolumn = 'Data',
  7. @path = 'c:\XML\',
  8. @filetype ='*.xml',
  9. @printorexec ='print'

Thủ tục này sẽ tự tạo ra tất cả các câu lệnh cần thiết cho việc tạo một dòng cho từng file và update dòng với file thuộc tính theo đoạn mã sau.

  1. set quoted_identifier off
  2. go
  3. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer1.xml")
  4. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  5. FROM OPENROWSET(BULK "c:\XML\Customer1.xml", SINGLE_BLOB)AS x )
  6. WHERE [XML File Name]="Customer1.xml"
  7. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer2.xml")
  8. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  9. FROM OPENROWSET(BULK "c:\XML\Customer2.xml", SINGLE_BLOB)AS x )
  10. WHERE [XML File Name]="Customer2.xml"
  11. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer3.xml")
  12. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  13. FROM OPENROWSET(BULK "c:\XML\Customer3.xml", SINGLE_BLOB)AS x )
  14. WHERE [XML File Name]="Customer3.xml"
  15. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer4.xml")
  16. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  17. FROM OPENROWSET(BULK "c:\XML\Customer4.xml", SINGLE_BLOB)AS x )
  18. WHERE [XML File Name]="Customer4.xml"
  19. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer5.xml")
  20. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  21. FROM OPENROWSET(BULK "c:\XML\Customer5.xml", SINGLE_BLOB)AS x )
  22. WHERE [XML File Name]="Customer5.xml"
  23. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer6.xml")
  24. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  25. FROM OPENROWSET(BULK "c:\XML\Customer6.xml", SINGLE_BLOB)AS x )
  26. WHERE [XML File Name]="Customer6.xml"
  27. Insert into [XMLTest].[dbo].[MYXML] ([XML File Name]) values ("Customer7.xml")
  28. update [XMLTest].[dbo].[MYXML] set [Data] = (SELECT *
  29. FROM OPENROWSET(BULK "c:\XML\Customer7.xml", SINGLE_BLOB)AS x )
  30. WHERE [XML File Name]="Customer7.xml"

Bước 7:

Thực thi thủ tục với tham số printorexec=’exec’ theo đoạn mã dưới
  1. Exec master..[usp_uploadXMLfiles]
  2. @databasename ='XMLTest',
  3. @schemaname ='dbo',
  4. @tablename ='MYXML',
  5. @FileNameColumn ='XML File Name',
  6. @XMLcolumn = 'Data',
  7. @path = 'c:\XML\',
  8. @filetype ='*.xml',
  9. @printorexec ='exec'

Đoạn mã sẽ upload toàn bộ các file xml

Bước 8:

Giờ thì chúng ta sẽ truy vấn bảng sử dụng câu lệnh SQL thực hiện như đoạn dưới
  1. use XMLTest
  2. go
  3. select * from myxml
  4. go

Thủ tục này sẽ trả về kết quả như hình dưới:

Bước 9:

Kích lên các kết nối dữ liệu XML để phát sinh kết quả như dưới đây
  1. 2007-03-31T06:40:38.0000000-05:00
  2. Dancing.Doll
  3. 1AE
  4. A-Accessible
  5. 761
  6. Stopped
  7. 30
  8. 2007-03-31T06:40:38.0000000-05:00
  9. Dancing.Doll
  10. 1AE
  11. Not-Accessible
  12. 870
  13. Stopped
  14. 30
  15. 2007-03-31T06:40:38.0000000-05:00
  16. Dancing.Doll
  17. 1AE
  18. A-Accessible
  19. 97F
  20. Started
  21. 30