开发者

Question about showing sql server data in a tabbed view

I am creating a inventory app using c# that pulls its info from sql server. I am making it a tabbed view, with each tab representing a different type of item. I have included some of my code, what I am trying to figure is, is there a better way to do this? I dont feel like the way I am doing is right, even though it works. All my queries for each tab are stored procedures. Secondly, How would I insert and update the database through the grid?

 public partial class InventoryWindow : Window
{

    private InventoryDS InvDS;

    private String connString = "server=PC-server;database=Inventory;user=user;password=password";

    String sqlString_Routers = InventoryOutputQuery.InventorySummary_Routers();

    public InventoryWindow()
    {
        InitializeComponent();

        if (dgDataView != null)
        {
            SqlConnection con = new SqlConnection(connString);
            SqlDataAdapter adpt = new SqlDataAdapter(sqlString_Routers, con);
            DataSet ds = new DataSet();
            adpt.Fill(ds, sqlString_Routers);
            dgDataView.DataContext = ds;
        }
    }

    private void showTaps()
    {
        String sqlString_Taps = InventoryOutputQuery.InventorySummary_Routers();

        SqlConnection con = new SqlConnection(connString);
        con.Open();
        SqlCommand cmd = new SqlCommand(sqlString_Routers, con);
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
    开发者_JAVA百科    dgDataView.DataContext = dt;
        con.Close();
    }

    private void showPower()
    {
        String sqlString_Power = InventoryOutputQuery.InventorySummary_Power();

        SqlConnection con = new SqlConnection(connString);
        con.Open();
        SqlCommand cmd = new SqlCommand(sqlString_Power, con);
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        dgDataView.DataContext = dt;
        con.Close();
    }

    private void showSwitches()
        {
            String sqlString_Switches = InventoryOutputQuery.InventorySummary_Switches();

            SqlConnection con = new SqlConnection(connString);
            con.Open();
            SqlCommand cmd = new SqlCommand(sqlString_Switches, con);
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);
            dgDataView.DataContext = dt;
            con.Close();
        }

And below is how i bind it to the grid:

public void BindGrid(string view)
{
    switch (view.ToUpper())
    {
        case "Routers":
            showTaps();
            break;
        case "POWER":
            showPower();
            break;
        case "SWITCHES":
            showSwitches();
            break;
        case "HUBS":
            showHubs();




private void tcDataView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            TabItem ti = tcDataView.SelectedItem as TabItem;

            if (ti != null)
                BindGrid(ti.Header.ToString());
        }
                    break;


My suggestion is to be careful with how we handle SqlConnection. It is a scarce resource and it will run out pretty soon if we are not careful. Please wrap sql code in a using block, for example:

using (SqlConnection con = new SqlConnection(connString))
{
    SqlDataAdapter adpt = new SqlDataAdapter(sqlString_Routers, con);
    DataSet ds = new DataSet();
    adpt.Fill(ds, sqlString_Routers);
    dgDataView.DataContext = ds;
}

The following link will explain the effect of 'using' block in a bit more details.

http://www.codeproject.com/KB/cs/tinguusingstatement.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜