الأربعاء، 23 مايو 2012

How to Keep Your Information Secure in the Cloud?

In 2011, hacking groups like Lulzsec and Anonymous provoked an Internet firestorm by hacking major Web sites like Fox.com and online services like Sony's PlayStation Network. Millions of user accounts were compromised. Usernames, passwords, home addresses and credit card information -- lax Web site security often allows hackers easy access to boatloads of personal information. We can blame corporations for poor security and hackers for maliciously attacking Web sites, but there's a third party often at fault in these attacks: ourselves, the users. No, it's not our fault Web sites get hacked. But poor Web safety habits put us at risk when we shouldn't be. How often do you use the same username and password? Every time you create a new profile? If someone hacked your Facebook account, could they just as easily get into your e-mail inbox? Reusing passwords -- or using weak passwords -- makes you an easy target for identity theft. Remembering multiple passwords can be a pain, but there are Web services that can help. We'll talk about one of the most popular options later in this Post. Internet cloud services -- services that store your data on a server rather than on your hard drive so you can access it from any Internet-enabled device -- are more powerful than ever before. Backing up photographs and important documents has never been easier. Google Docs and Gmail can take the place of Microsoft Word and Outlook Express. Banking sites take the place of expensive finance applications. All we have to do is be safe while we use them. Here are some simple safety tips for keeping your data secure in the cloud. First up: making your passwords as tough to crack as Fort Knox.


1: Be Alert and Play It Safe


Internet hazards like viruses are, for the most part, easy to avoid. Shady Web sites usually look shady; e-mail attachments from spam addresses are never worth opening. Antivirus software is always a smart precaution, but smart browsing is an even greater ally. What does this have to do with protecting your data in the cloud? The same rules apply when it comes to buying online or creating accounts on new Web sites: Make sure the site is trustworthy. If you're buying from a retailer you've never heard of, do a little research on them first. They could have notoriously lax security and have a history of losing customer credit card information to hacking breaches. Finally, be aware of what computers you're logged into. Browsers will often ask to save your login information and keep a login session alive as long as the browser is open. If you log in to Facebook or your e-mail account on a friend's laptop and then leave, you'll likely still be logged in to those sites. If they're trustworthy, that may not be a problem. But what if you're using a public computer? Stay logged in to one of those and anyone could gain access to your account. Yep, that would be bad. Unless you're using your own computer, remember to log out and never save your password and user information. Browse safe, and with a little luck, you'll never have to worry about anyone finding a single one of your online passwords.


2: Back Up Your Data


 If there's one piece of advice the tech savvy have been espousing for years and years, it's this: Back up your data. A power surge, faulty hard drive platter, robbery or other unexpected system failure could happen when you least expect it, and if your data isn't backed up you'll beat yourself up over it for weeks. Years ago, backing up data was an arduous task. Hard drive storage was costly, but floppy disks only held a paltry amount of data. Eventually, ZIP disks and CD burners offered enough space to facilitate backups, and DVDs and cheap hard drives made them easier still. But now we have something even better: the cloud.
SOS Online Backup 1 TB for $59.95 Cloud storage solutions come in all shapes and sizes. Dropbox offers only a couple gigabytes of free storage, but its interface is incredibly simple to use. It creates a folder on your hard drive that's linked to the Web -- all you have to do to upload files is drag them into the folder. WindowsLiveSkydrive is designed to make it easy to view and edit Office documents in the cloud. Amazon's Cloud Drive offers 5 gigabytes of free storage and a Web interface for uploading your files. Other services, like SugarSync and Mozy, focus more on automatically backing up your important data and storing it, rather than making it easily accessible online. Here's the smartest way to backup your data: Don't rely on one service. Store files you access frequently in Dropbox and back up more in a free service like Amazon Cloud Drive.
Keep a local backup on a secondary hard drive or on an automated backup drive like Apple'sTimeCapsule. With your data securely backed up and your passwords uncrackable, there's only one thing left to be concerned about: your browsing habits.



3: Manage Passwords with LastPass 


LastPass is a password management utility that locks all of your unique passwords behind one master password. That means you can create separate logins for e-mail, Facebook, Twitter, cloud storage and everything else you do online, but still access those accounts by memorizing one single password. Web browsers will remember passwords for you, but LastPass can synchronize your information across multiple browsers and devices and fill in forms with a single click. LastPass will even help you create randomized passwords that no one will ever crack.
The service is free, but for a $1 per month premium account you gain access to the mobile version of LastPass for iOS, Android and most other mobile operating systems. What if LastPass gets hacked? That's possible, but LastPasshasprotocolsinplace to encourage users to change their master passwords in the event of a breach. More importantly, validation tools like IP and e-mail address verification make it difficult for an impostor to log in to your LastPass account. LastPass is just one example of a cloud-based service that makes managing data on the Web easier. When it comes to preserving your important pictures and files, finding the right backup services is key.



4: Don't Reuse or Share Passwords 


The annoyance of remembering passwords strikes again. It's bad enough that we tend to use simple, easy-to-remember passwords for our Web logins -- we also tend to pick one or two passwords and use them again and again for our e-mail, banking, Facebook and everything else. That's bad. In fact, that's really bad. If your password is compromised, someone could easily gain access to your e-mail account. And change that password. And then go to every site you're registered on and change those passwords -- the replacement passwords are always sent to your e-mail address. Use different passwords for different sites. At the very least, change up letters, symbols and capitalization if you plan to use the same word or phrase across multiple sites. Make absolutely sure you don't repeat a password across sites that have your credit card information or social security number. Your e-mail password is the most important. Keep it secure and don't use it for any other sites. One last password tip: Don't tell other people your passwords. Even if you trust them, it's not a particularly good idea. The more people who know your passwords, the greater the chances that those passwords could be accidentally compromised. All these password rules make our online lives more secure, but they don't make them easier. Next up: a tool for taking some of the inconvenience out of password management.


5: Play Smart with Passwords 


Passwords are designed to keep our information safe from prying eyes. They're like locks. A hacker may force the door and break your lock, but most of the time a strong lock keeps people out. But let's be honest: Passwords are annoying. Remembering them is a pain, so we often take the easy way out and use simple passwords that we won't forget. But if they're easy to remember, they're also easy to guess.

When the site RockYou.com was hacked in 2009, a security firm examined the 32 million compromised passwords and found that thousands upon thousands of users relied on the same basic phrases.
Buy Now!The password "123456" took first place with 290,731 hits; "12345," "123456789," "Password" and "iloveyou" rounded out the top five most-used passwords [source: Tom'sHardware].
If you use one of those passwords, change it. The more complicated your password is, the safer your data will be. It's true, complex passwords won't be as easy to recall. Find a safe place to record your passwords if you can't remember them. The best passwords combine letters, numbers and symbols into an unusual configuration. Don't take the easy route and capitalize the first letter of the word or use the numeral "1" in place of the letter "l" or a zero in place of the letter "O." Throw in a few random numbers or characters like a plus sign (+) or underscore (_) and you'll be far better off than anyone relying on "password123" or "qwerty" to keep them safe. Once you have a good password, what you do next is just as important: Don't spread it around.


الثلاثاء، 22 مايو 2012

DataGridView in Windows Forms – Tips, Tricks




DataGridView control is a Windows Forms control that gives you the ability to customize and edit tabular data. It gives you number of properties, methods and events to customize its appearance and behavior. In this article, we will discuss some frequently asked questions and their solutions. These questions have been collected from a variety of sources including some newsgroups, MSDN site and a few, answered by me at the MSDN forums.
Tip 1 – Populating a DataGridView
In this short snippet, we will populate a DataGridView using the LoadData() method. This method uses the SqlDataAdapter to populate a DataSet. The table ‘Orders’ in the DataSet is then bound to the BindingSource component which gives us the flexibility to choose/modify the data location.
C#
public partial class Form1 : Form
    {
        private SqlDataAdapter da;
        private SqlConnection conn;
        BindingSource bsource = new BindingSource();
        DataSet ds = null;
        string sql;
        public Form1()
        {
            InitializeComponent();
        }

private void btnLoad_Click(object sender, EventArgs e)

        {
            LoadData();
        }
        private void LoadData()
        {
string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
            conn = new SqlConnection(connectionString);
sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," +"ShipName, ShipCountry FROM Orders";
            da = new SqlDataAdapter(sql, conn);
            conn.Open();




            ds = new DataSet();
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);          
            da.Fill(ds, "Orders");
            bsource.DataSource = ds.Tables["Orders"];
            dgv.DataSource = bsource;          
        }
    }
VB.NET
Public Partial Class Form1
      Inherits Form
            Private da As SqlDataAdapter
            Private conn As SqlConnection
            Private bsource As BindingSource = New BindingSource()
            Private ds As DataSet = Nothing
            Private sql As String
            Public Sub New()
                  InitializeComponent()
            End Sub
Private Sub btnLoad_Click(ByVal sender As ObjectByVal e As EventArgs)
                  LoadData()
            End Sub


 Private Sub LoadData()

Dim connectionString As String = "Data Source=localhost;Initial Catalog=Northwind;" & "Integrated Security=SSPI;"
                  conn = New SqlConnection(connectionString)
sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," & "ShipName, ShipCountry FROM Orders"
                  da = New SqlDataAdapter(sql, conn)
                  conn.Open()
                  ds = New DataSet()
Dim commandBuilder As SqlCommandBuilder = New SqlCommandBuilder(da)
                  da.Fill(ds, "Orders")
                  bsource.DataSource = ds.Tables("Orders")
                  dgv.DataSource = bsource
            End Sub
End Class
Tip 2 – Update the data in the DataGridView and save changes in the database
After editing the data in the cells, if you would like to update the changes permanently in the database, use the following code:
C#
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            DataTable dt = ds.Tables["Orders"];
           this.dgv.BindingContext[dt].EndCurrentEdit();
            this.da.Update(dt);
        }
VB.NET



Private Sub btnUpdate_Click(ByVal sender As ObjectByVal e As EventArgs)
                  Dim dt As DataTable = ds.Tables("Orders")
                  Me.dgv.BindingContext(dt).EndCurrentEdit()
                  Me.da.Update(dt)
      End Sub
Tip 3 – Display a confirmation box before deleting a row in the DataGridView
Handle the UserDeletingRow event to display a confirmation box to the user. If the user confirms the deletion, delete the row. If the user clicks cancel, set e.cancel = true which cancels the row deletion.
C#
private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            if (!e.Row.IsNewRow)
            {
                DialogResult res = MessageBox.Show("Are you sure you want to delete this row?""Delete confirmation",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (res == DialogResult.No)
                    e.Cancel = true;
            }
        }
VB.NET
Private Sub dgv_UserDeletingRow(ByVal sender As ObjectByVal e AsDataGridViewRowCancelEventArgs)
                  If (Not e.Row.IsNewRow) Then
                        Dim res As DialogResult = MessageBox.Show("Are you sure you want to delete this row?", "Delete confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                        If res = DialogResult.No Then
                              e.Cancel = True
                        End If
                  End If
End Sub

Tip 4 – How to autoresize column width in the DataGridView
The snippet shown below, first auto-resizes the columns to fit its content. Then the AutoSizeColumnsMode is set to the ‘DataGridViewAutoSizeColumnsMode.AllCells’ enumeration value which automatically adjust the widths of the columns when the data changes.
C#
private void btnResize_Click(object sender, EventArgs e)
        {
            dgv.AutoResizeColumns();
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        }
VB.NET
Private Sub btnResize_Click(ByVal sender As ObjectByVal e As EventArgs)
                  dgv.AutoResizeColumns()
                  dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
End Sub
Tip 5 - Select and Highlight an entire row in DataGridView
C#
int rowToBeSelected = 3; // third row
if (dgv.Rows.Count >= rowToBeSelected)
{             
       // Since index is zero based, you have to subtract 1
        dgv.Rows[rowToBeSelected - 1].Selected = true;
}
VB.NET
Dim rowToBeSelected As Integer = 3 ' third row
If dgv.Rows.Count >= rowToBeSelected Then
         ' Since index is zero based, you have to subtract 1
            dgv.Rows(rowToBeSelected - 1).Selected = True
End If
Tip 6 - How to scroll programmatically to a row in the DataGridView
The DataGridView has a property called FirstDisplayedScrollingRowIndex that can be used in order to scroll to a row programmatically.
C#
int jumpToRow = 20;
if (dgv.Rows.Count >= jumpToRow && jumpToRow >= 1)
{             
        dgv.FirstDisplayedScrollingRowIndex = jumpToRow;
        dgv.Rows[jumpToRow].Selected = true;
}
VB.NET

Dim jumpToRow As Integer = 20
If dgv.Rows.Count >= jumpToRow AndAlso jumpToRow >= 1 Then
            dgv.FirstDisplayedScrollingRowIndex = jumpToRow
            dgv.Rows(jumpToRow).Selected = True
End If
Tip 7 - Calculate a column total in the DataGridView and display in a textbox
A common requirement is to calculate the total of a currency field and display it in a textbox. In the snippet below, we will be calculating the total of the ‘Freight’ field. We will then display the data in a textbox by formatting the result (observe the ToString("c")) while displaying the data, which displays the culture-specific currency.
C#
private void btnTotal_Click(object sender, EventArgs e)
        {
            if(dgv.Rows.Count > 0)
             txtTotal.Text = Total().ToString("c");
        }
        private double Total()
        {
            double tot = 0;
            int i = 0;
            for (i = 0; i < dgv.Rows.Count; i++)
            {
                tot = tot + Convert.ToDouble(dgv.Rows[i].Cells["Freight"].Value);
            }
            return tot;
        }
VB.NET
Private Sub btnTotal_Click(ByVal sender As ObjectByVal e As EventArgs)
                  If dgv.Rows.Count > 0 Then
                   txtTotal.Text = Total().ToString("c")
                  End If
End Sub
Private Function Total() As Double
                  Dim tot As Double = 0
                  Dim i As Integer = 0
                  For i = 0 To dgv.Rows.Count - 1
                        tot = tot + Convert.ToDouble(dgv.Rows(i).Cells("Freight").Value)
                  Next i
                  Return tot
End Function
Tip 8 - Change the Header Names in the DataGridView
If the columns being retrieved from the database do not have meaningful names, we always have the option of changing the header names as shown in this snippet:
C#
private void btnChange_Click(object sender, EventArgs e)
        {
            dgv.Columns[0].HeaderText = "MyHeader1";
            dgv.Columns[1].HeaderText = "MyHeader2";
        }
VB.NET
Private Sub btnChange_Click(ByVal sender As ObjectByVal e As EventArgs)
                  dgv.Columns(0).HeaderText = "MyHeader1"
                  dgv.Columns(1).HeaderText = "MyHeader2"
End Sub
Tip 9 - Change the Color of Cells, Rows and Border in the DataGridView
C#
private void btnCellRow_Click(object sender, EventArgs e)
        {
            // Change ForeColor of each Cell
            this.dgv.DefaultCellStyle.ForeColor = Color.Coral;
            // Change back color of each row
            this.dgv.RowsDefaultCellStyle.BackColor = Color.AliceBlue;
            // Change GridLine Color
            this.dgv.GridColor = Color.Blue;
            // Change Grid Border Style
            this.dgv.BorderStyle = BorderStyle.Fixed3D;
        }
VB.NET
Private Sub btnCellRow_Click(ByVal sender As ObjectByVal e As EventArgs)
                  ' Change ForeColor of each Cell
                  Me.dgv.DefaultCellStyle.ForeColor = Color.Coral
                  ' Change back color of each row
                  Me.dgv.RowsDefaultCellStyle.BackColor = Color.AliceBlue
                  ' Change GridLine Color
                  Me.dgv.GridColor = Color.Blue
                  ' Change Grid Border Style
                  Me.dgv.BorderStyle = BorderStyle.Fixed3D
End Sub
Tip 10 - Hide a Column in the DataGridView
If you would like to hide a column based on a certain condition, here’s a snippet for that.
C#
private void btnHide_Click(object sender, EventArgs e)
        {
            this.dgv.Columns["EmployeeID"].Visible = false;
        }
VB.NET
Private Sub btnHide_Click(ByVal sender As ObjectByVal e As EventArgs)
                  Me.dgv.Columns("EmployeeID").Visible = False
End Sub


Tip 11 - Handle SelectedIndexChanged of a ComboBox in the DataGridView
To handle the SelectedIndexChanged event of a DataGridViewComboBox, you need to use the DataGridView.EditingControlShowing event as shown below. You can then retrieve the selected index or the selected text of the combobox.
C#
private void dataGridView1_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
        {
            ComboBox editingComboBox = (ComboBox)e.Control;
            if(editingComboBox != null)
                editingComboBox.SelectedIndexChanged += newSystem.EventHandler(this.editingComboBox_SelectedIndexChanged);
        }
private void editingComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            ComboBox comboBox1 = (ComboBox)sender;
            // Display index
            MessageBox.Show(comboBox1.SelectedIndex.ToString());
            // Display value
            MessageBox.Show(comboBox1.Text);
        }
VB.NET
Private Sub dataGridView1_EditingControlShowing(ByVal sender As ObjectByVal e AsDataGridViewEditingControlShowingEventArgs)
www.GoDaddy.com  
                  Dim editingComboBox As ComboBox = CType(e.Control, ComboBox)
                  If Not editingComboBox Is Nothing Then
                        AddHandler editingComboBox.SelectedIndexChanged, AddressOfeditingComboBox_SelectedIndexChanged
                  End If
End Sub
Private Sub editingComboBox_SelectedIndexChanged(ByVal sender As ObjectByVal e AsSystem.EventArgs)
                  Dim comboBox1 As ComboBox = CType(sender, ComboBox)
                  ' Display index
                  MessageBox.Show(comboBox1.SelectedIndex.ToString())
                  ' Display value
                  MessageBox.Show(comboBox1.Text)
End Sub
Tip 12 - Change Color of Alternate Rows in the DataGridView
C#
private void btnAlternate_Click(object sender, EventArgs e)
        {
            this.dgv.RowsDefaultCellStyle.BackColor = Color.White;
            this.dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine;
        }
VB.NET
Private Sub btnAlternate_Click(ByVal sender As ObjectByVal e As EventArgs)
                  Me.dgv.RowsDefaultCellStyle.BackColor = Color.White
                  Me.dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine
End Sub
Tip 13 - Formatting Data in the DataGridView
The DataGridView exposes properties that enable you to format data such as displaying a currency column in the culture specific currency or displaying nulls in a desired format and so on.
C#
private void btnFormat_Click(object sender, EventArgs e)
        {
            // display currency in culture-specific currency for
            this.dgv.Columns["Freight"].DefaultCellStyle.Format = "c";
            // display nulls as 'NA'
            this.dgv.DefaultCellStyle.NullValue = "NA";
        }
VB.NET
Private Sub btnFormat_Click(ByVal sender As ObjectByVal e As EventArgs)
                  ' display currency in culture-specific currency for
                  Me.dgv.Columns("Freight").DefaultCellStyle.Format = "c"
                  ' display nulls as 'NA'
                  Me.dgv.DefaultCellStyle.NullValue = "NA"
End Sub
Tip 14 – Change the order of columns in the DataGridView
In order to change the order of columns, just set the DisplayIndex property of the DataGridView to the desired value. Remember that the index is zero based.
C#
private void btnReorder_Click(object sender, EventArgs e)
        {
             dgv.Columns["CustomerID"].DisplayIndex = 5;
             dgv.Columns["OrderID"].DisplayIndex = 3;
             dgv.Columns["EmployeeID"].DisplayIndex = 1;
             dgv.Columns["OrderDate"].DisplayIndex = 2;
             dgv.Columns["Freight"].DisplayIndex = 6;
             dgv.Columns["ShipCountry"].DisplayIndex = 0;
             dgv.Columns["ShipName"].DisplayIndex = 4;
        }
VB.NET
Private Sub btnReorder_Click(ByVal sender As ObjectByVal e As EventArgs)
                   dgv.Columns("CustomerID").DisplayIndex = 5
                   dgv.Columns("OrderID").DisplayIndex = 3
                   dgv.Columns("EmployeeID").DisplayIndex = 1
                   dgv.Columns("OrderDate").DisplayIndex = 2
                   dgv.Columns("Freight").DisplayIndex = 6
                   dgv.Columns("ShipCountry").DisplayIndex = 0
                   dgv.Columns("ShipName").DisplayIndex = 4
End Sub