نمایش نتایج 1 تا 7 از 7

نام تاپیک: مشکل در نمایش ساختار درختی دیتابیس و جدول ها

  1. #1
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727

    مشکل در نمایش ساختار درختی دیتابیس و جدول ها

    سلام
    من میخوام توی treeView اطلاعات دو جدول به صورت master/details نمایش بدم، اینم جداول و کد من :
    t_books(bookID(PK),bookName) -> master
    t_sessions(sessionID(PK),bookID(FK),sessionName) -> details

    i wrote this code to show hirarical data in treeView :

    SqlConnection con = new SqlConnection(Properties.Settings.Default.Database 1ConnectionString);
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter adapter = new SqlDataAdapter();
    cmd.CommandText = "select * from t_books";
    cmd.Connection = con;
    adapter.SelectCommand = cmd;
    DataSet ds = new DataSet();

    SqlCommand cmd2 = new SqlCommand();
    SqlDataAdapter adapter2 = new SqlDataAdapter();
    cmd2.CommandText = "select * from t_sessions";
    cmd2.Connection = con;
    adapter2.SelectCommand = cmd2;

    adapter.Fill(ds, "t_books");
    adapter2.Fill(ds, "t_sessions");
    DataRelation dataRelation;
    DataColumn dc1 = ds.Tables["t_books"].Columns["bookID"];
    DataColumn dc2 = ds.Tables["t_sessions"].Columns["bookID"];
    dataRelation = new DataRelation("Relation1", dc1, dc2);
    ds.Relations.Add(dataRelation);

    TreeNode book;
    TreeNode session;

    foreach (DataRow row in ds.Tables["t_books"].Rows)
    {
    book = new TreeNode(string.Format("{0}", (string)row["bookName"]));
    book.Tag = row;

    ds.Tables["t_sessions"].DefaultView.RowFilter = "bookID="+ row["bookID"];
    foreach (DataRow sessionRow in ds.Tables["t_sessions"].Rows)
    {
    session = new TreeNode(string.Format("{0}", (int)sessionRow["bookID"]));
    session.Tag = sessionRow;
    book.Nodes.Add(session);
    }
    this.treeView1.Nodes.Add(book);
    }

    منتها نمیدونم چرا در زمان اجرا، داده ها در هر node فیلتر نمیشن و در هر node تمام داده های جدول child که همون t_sessions باشه نمایش داده میشن، هر چی هست از فیلتر کردن داده هاست،کسی میتونه مشکل منو حل کنه ؟ مرسی

  2. #2
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    تاثیر RowFilter روی DataView اعمال میشه، واسه همین باید حلقه دوم روی DataView زده بشه:


    ds.Tables["t_sessions"].DefaultView.RowFilter = "bookID="+ row["bookID"];
    for( int i=0; i< ds.Tables["t_sessions"].DefaultView.Count; i++ )
    {
    DataRowView sessionRow = ds.Tables["t_sessions"].DefaultView[i];
    session = new TreeNode(string.Format("{0}", (int)sessionRow["bookID"]));
    session.Tag = sessionRow;
    book.Nodes.Add(session);
    }

  3. #3
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    Sorenaa_s عزیز باز هم یه زحمت دیگه، من به غیر از جدول t_sissions یه جدول دیگه ای به نام t_titles دارم که این بار این دو با هم رابطه ی master/details دارن، اینم کد من برای کل قسمتهاشه، ولی در قسمت titles باز داده ها درست در نمیان، اشکال کار از کجاست ؟

    SqlConnection con = new SqlConnection(Properties.Settings.Default.Database 1ConnectionString);
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter adapter = new SqlDataAdapter();
    cmd.CommandText = "select * from t_books";
    cmd.Connection = con;
    adapter.SelectCommand = cmd;
    DataSet ds = new DataSet();

    SqlCommand cmd2 = new SqlCommand();
    SqlDataAdapter adapter2 = new SqlDataAdapter();
    cmd2.CommandText = "select * from t_sessions";
    cmd2.Connection = con;
    adapter2.SelectCommand = cmd2;

    SqlCommand cmd3 = new SqlCommand();
    SqlDataAdapter adapter3 = new SqlDataAdapter();
    cmd3.CommandText = "select * from t_titles";
    cmd3.Connection = con;
    adapter3.SelectCommand = cmd3;

    adapter.Fill(ds, "t_books");
    adapter2.Fill(ds, "t_sessions");
    adapter3.Fill(ds, "t_titles");

    DataRelation dataRelation;
    DataRelation dataRelation2;

    DataColumn dc1 = ds.Tables["t_books"].Columns["bookID"];
    DataColumn dc2 = ds.Tables["t_sessions"].Columns["bookID"];

    DataColumn dc3 = ds.Tables["t_sessions"].Columns["sessionID"];
    DataColumn dc4 = ds.Tables["t_titles"].Columns["sessionID"];

    dataRelation = new DataRelation("Relation1", dc1, dc2);
    dataRelation2 = new DataRelation("Relation2", dc3, dc4);
    ds.Relations.Add(dataRelation);
    ds.Relations.Add(dataRelation2);
    TreeNode book;
    TreeNode session;
    TreeNode title;

    foreach (DataRow row in ds.Tables["t_books"].Rows)
    {
    book = new TreeNode(string.Format("{0}", (string)row["bookName"]));
    book.Tag = row;
    ds.Tables["t_sessions"].DefaultView.RowFilter = "bookID=" + row["bookID"];
    for (int i = 0; i < ds.Tables["t_sessions"].DefaultView.Count; i++)
    {
    DataRowView sessionRow = ds.Tables["t_sessions"].DefaultView[i];
    session = new TreeNode(string.Format("{0}", (string)sessionRow["sessionName"]));
    session.Tag = sessionRow;

    ds.Tables["t_titles"].DefaultView.RowFilter = "sessionID=" + sessionRow["sessionID"];
    for (int j = 0; j < ds.Tables["t_titles"].DefaultView.Count; j++)
    {
    DataRowView titleRow = ds.Tables["t_titles"].DefaultView[j];
    title = new TreeNode(string.Format("{0}", (string)titleRow["titleName"]));
    title.Tag = titleRow;

    session.Nodes.Add(title);
    }

    book.Nodes.Add(session);
    }
    this.treeView1.Nodes.Add(book);
    }

    مرسی

  4. #4
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115

    public static void LoadTree( TreeView tree)
    {
    string cnnString = "workstation id=GHAFFARI;packet size=4096;integrated security=SSPI;initial catalog=TempDataBase;persist security info=False";
    SqlConnection con = new SqlConnection( cnnString );
    DataSet ds = new DataSet();
    if( con.State != ConnectionState.Open )
    con.Open();
    SqlCommand cmd = null;
    SqlDataAdapter adapter = null;

    cmd = new SqlCommand( "select * from t_books", con );
    adapter = new SqlDataAdapter( cmd );
    adapter.Fill( ds, "t_books" );
    cmd = new SqlCommand( "select * from t_sessions", con );
    adapter = new SqlDataAdapter( cmd );
    adapter.Fill(ds, "t_sessions");
    cmd = new SqlCommand( "select * from t_titles", con );
    adapter = new SqlDataAdapter( cmd );
    adapter.Fill(ds, "t_titles");
    TreeNode book;
    TreeNode session;
    TreeNode title;
    foreach( DataRow row in ds.Tables["t_books"].Rows )
    {
    book = new TreeNode( (string)row["bookName"] );
    book.Tag = row;
    ds.Tables["t_sessions"].DefaultView.RowFilter = "bookID=" + row["bookID"];
    for (int i = 0; i < ds.Tables["t_sessions"].DefaultView.Count; i++)
    {
    DataRowView sessionRow = ds.Tables["t_sessions"].DefaultView[i];
    session = new TreeNode( (string)sessionRow["sessionName"] );
    session.Tag = sessionRow;
    ds.Tables["t_titles"].DefaultView.RowFilter = "sessionID=" + sessionRow["sessionID"];
    for (int j = 0; j < ds.Tables["t_titles"].DefaultView.Count; j++)
    {
    DataRowView titleRow = ds.Tables["t_titles"].DefaultView[j];
    title = new TreeNode( (string)titleRow["titleName"] );
    title.Tag = titleRow;
    session.Nodes.Add(title);
    }
    book.Nodes.Add(session);
    }
    tree.Nodes.Add(book);
    }
    }

    ------ SQL Script

    CREATE TABLE [dbo].[t_books] (
    [bookID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [BookName] [nvarchar] (50) COLLATE Arabic_CI_AS NULL
    ) ON [PRIMARY]
    GO
    CREATE TABLE [dbo].[t_sessions] (
    [SessionID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [SessionName] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
    [BookID] [numeric](18, 0) NULL
    ) ON [PRIMARY]
    GO
    CREATE TABLE [dbo].[t_titles] (
    [titleID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [titleName] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
    [sessionID] [numeric](18, 0) NULL
    ) ON [PRIMARY]
    GO




    راستش مشکل کد شما رومتوجه نشدهم، ولی این کد ( کد تغییر داده شه کد شماست ) درست اجرا شد. شما هم تستش کن.

  5. #5
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    دستت درد نکنه، خیلی زحمت کشیدی، تستش میکنم، بازم ممنون

  6. #6
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    Sorenaa_s عزیز ممنونم ازت، همون مال خودمم درست بود، فقط توی خوندن اطلاعات، بی دقتی کرده بودم، به هر حال یه دنیا ممنون، امیدوارم جبران کنم.

  7. #7
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    خواهش میکنم، گفتم که من تغییر خاصی ندادم تو کد شما

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •