الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سوال بخصوص DATAVIEW

بدأه السيد الهاشمي في 20 أكتوبر 2011 · 4 رد · 1,140 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله بركاته

اخواني اعضاء عندي سوال

وانا اقراء في كتاب شوفت فيه صاحب الكتاب يقول انه الافضل استخدام DataView

في الاستعلام لو كان فيه شرط افضل للفهرسة

قال مثلن لو لو عندي جدول خاص بالكتب وفيه

id

name_ book

id_book

واريد ان استعلم عن الكتاب الذي رقمة مثلن

id_book=5

قال استطيع ان اجده بهذه الاستعلام لكن لو كان الجدول كبير جداُ

الاستعلام سوف يمر في كل السجلات من اجل البحث

ومن اجل تسهيل الاستعلام استخدم DataView

وسيكون شكل الاستعلام بشكل التالي

-------------------------------------

string prov="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("db.mdb"); string SQL="SELECT * FROM Lessons"; OleDbConnection cn = new OleDbConnection(prov); OleDbDataAdapter da = new OleDbDataAdapter(SQL,cn); DataSet ds = new DataSet(); DataView dv = new DataView(); da.Fill(ds,"Lessons"); dv=ds.Tables["Lessons"].DefaultView; dv.RowFilter="CatID=5"; dg.DataSource=dv; dg.DataBind(); }

وفهتم قصدة بس لو كان عندي اكثر من شرط

مثلن مثل هذه الاستعلام

------------------------------------

a.sql = "select g_img,g_count,g_price,g_details from goods where basket_flag=" & 1 & " and buy_flag=" & 0 & " and user_id=" & Session("u_id") & " "

كيف استخدم DataView

في مثل هذه الاستعلام لانه يوجد معي اكثر من شرط

ياليت توضوحو لي كيف اعمله ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة السيد الهاشمي في 21 أكتوبر 2011 في 10:54

#2

السلام عليكم

يا هلا والله با بن هاشم

يا بن هاشم بالنسبة للـ DataView أنا أعتقد إنه المقصود بجملة "تسهيل الإستعلام" هو في حالة إنه لو كانت البيانات قد تخزنت أول مره كاملة، فبدل من أن نقوم مرة أخرى بإستعلام جديد يمكننا فلترة الـ DataView (ولكن ماذا لو كان هناك تحديث مستمر على قاعدة البيانات؟؟؟؟!!!). هذا الكلام ممكن يصير لو كنت تتعامل مع Windows Application، ولكن بالنسبة للـ APS.NET لاتنسى إنه العملية هنا راح تكون Stateless. إلا لو كنت ناوي تجيب البيانات مرة وحدة وبعدين راح تخزنها في ViewState أو Session. المهم، في حالة وجود أكثر من شرط قوم بالتعامل مع الـ RowFilter Property وكأنك تكتب Where Clause، ولكن بدون ما يكون عندك Subquery تماما كما هو موضح في المثال التالي

DataView dv = any_datasource;
dv.RowFilter = "C1=any_value_1 and C2=any_value_2 and C3=any_valu_3 ..... and Cn=any_value_n";

/*
	where C1, C2, C3 .... Cn are columns in "dv" DataView
*/

أتمنى لك التوفيق والنجاح

تم تعديل هذه المشاركة بواسطة Robatic في 21 أكتوبر 2011 في 20:11

2
#3
Robatic كتب:

السلام عليكم

يا هلا والله با بن هاشم

يا بن هاشم بالنسبة للـ DataView أنا أعتقد إنه المقصود بجملة "تسهيل الإستعلام" هو في حالة إنه لو كانت البيانات قد تخزنت أول مره كاملة، فبدل من أن نقوم مرة أخرى بإستعلام جديد يمكننا فلترة الـ DataView (ولكن ماذا لو كان هناك تحديث مستمر على قاعدة البيانات؟؟؟؟!!!). هذا الكلام ممكن يصير لو كنت تتعامل مع Windows Application، ولكن بالنسبة للـ APS.NET لاتنسى إنه العملية هنا راح تكون Stateless. إلا لو كنت ناوي تجيب البيانات مرة وحدة وبعدين راح تخزنها في ViewState أو Session. المهم، في حالة وجود أكثر من شرط قوم بالتعامل مع الـ RowFilter Property وكأنك تكتب Where Clause، ولكن بدون ما يكون عندك Subquery تماما كما هو موضح في المثال التالي

DataView dv = any_datasource;
dv.RowFilter = "C1=any_value_1 and C2=any_value_2 and C3=any_valu_3 ..... and Cn=any_value_n";

/*
	where C1, C2, C3 .... Cn are columns in "dv" DataView
*/

أتمنى لك التوفيق والنجاح

------------------------------------

يـا هــــــــــــــــــــــلأآ فيك اكثــــــــر اخي العزيز .. ومشكور على شرحك الجميل . ماقصرت والله يااخي العزيز. اسئل الله ان يجزيك كل الخير وانا يرزقك علماُ ينتفع به ..

كنت حابب استفسر منك بعض الاستفسارات .. لو وقتك يسمح انا طبعاُ لسسة مبتدى في في asp.net حاب اسئل متى استخدم data table and data row and data clom

قريت بعض الكتب لكن لم اجد شي واضح ... وكنت اراء انهم يستخدمو دالة ااما من نوع دتا رو او دتا كلوم او دتا تيبل

ياليت توضح لي بشرح بسيط مثل ما وضحت لي المعلومة السابقة ولك جزيل الشكر اخي العزيز

#4

السلام عليكم

غالي والطلب رخيص يا بن هاشم

يا بن هاشم أنا بصراحة ما أقدر أحدد متى تستخدم كل من الـ DataTable, DataRow, and DataColumn ولكن أقدر أوضحلك كيفية إستخدامهم، وانت يبقى عليك تحدد متى تستخدمهم، أو متى يكون من الأسهل والأفضل إستخدامهم.

عزيزي الكريم، الـ DataTable عبارة عن Object يحتوي على كلا من الـ DataColumn و DataRow. بالنسبة للإستخدامات فهي كثيرة، ممكن تستخدمه لعملية Binding لـ DataGrid أو لـ DataList أو لـ DataView أو لـ CrsytalReport أو لـ Microsoft Report أو داخل DataSet أو لأي شيء تشوفة مناسب. عشان تبسط الفكرة خلينا ناخذ مثال: أفرض إننا نبغى ننشئ جدول مكون من حقلين وهما ID من نوع int و Person_Name من نوع string، ونقوم بإدخال بيانات بشكل عشوائي لهذا الجدول وإظهاراها عن طريق GridView و ListView. راح يكون الكود في صفحة التصميم aspx كالتالي:

<h3>Binding our DataTable to GridView</h3>
    <asp:GridView ID="myGridView" runat="server" Width="100%" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="ID" />
            <asp:BoundField HeaderText="Name" DataField="Person_Name" />
        </Columns>
    </asp:GridView>

    <h3>Binding our DataTable to ListView</h3>
    <asp:ListView ID="myListView" runat="server" ItemPlaceholderID="itemPlaceHolder">
        <LayoutTemplate>
            <table width="100%" cellpadding="5px" cellspacing="0">
                <tr>
                    <td style="color: #00f; font-weight: bold">ID</td>
                    <td style="color: #00f; font-weight: bold">Name</td>
                </tr>
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("ID") %></td>
                <td><%# Eval("Person_Name") %></td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

وراح يكون الـ Code Behind في ملف الـ aspx.cs كالتالي:

	protected void Page_Load(object sender, EventArgs e)
    {
        // Creating DataTable instance

        System.Data.DataTable dt = new System.Data.DataTable();

        // Adding columns using DataColumns

        dt.Columns.Add(new System.Data.DataColumn("ID", typeof(int))); // or dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add(new System.Data.DataColumn("Person_Name", typeof(string))); // or dt.Columns.Add("Person_Name", typeof(string));

        // Adding rows using DataRow

        for (int i = 1; i <= 10; i++)
        {
            System.Data.DataRow newRow = dt.NewRow();

	    /*
		The method System.Data.DataTable.NewRow() will return an instance of Syatem.Data.DataRow with the same structure of the calling
		System.Data.DataTable instance. The fields in the newly created instance of System.Data.DataRow can be accessed trough a zero-based index
		or by column name (I prefer column name)
	    */

            newRow["ID"] = i;
            newRow["Person_Name"] = "Person #" + i;

            dt.Rows.Add(newRow); // or dt.Rows.Add(i, "Person #" + i);
        }

        // Binding GridView

        myGridView.DataSource = dt;
        myGridView.DataBind();

        // Binding ListView

        myListView.DataSource = dt;
        myListView.DataBind();
    }

أتمنى أن اكون قد أصبت وأتمنى لك التوفيق والنجاح

تم تعديل هذه المشاركة بواسطة Robatic في 21 أكتوبر 2011 في 21:38

2
#5
Robatic كتب:

السلام عليكم

غالي والطلب رخيص يا بن هاشم

يا بن هاشم أنا بصراحة ما أقدر أحدد متى تستخدم كل من الـ DataTable, DataRow, and DataColumn ولكن أقدر أوضحلك كيفية إستخدامهم، وانت يبقى عليك تحدد متى تستخدمهم، أو متى يكون من الأسهل والأفضل إستخدامهم.

عزيزي الكريم، الـ DataTable عبارة عن Object يحتوي على كلا من الـ DataColumn و DataRow. بالنسبة للإستخدامات فهي كثيرة، ممكن تستخدمه لعملية Binding لـ DataGrid أو لـ DataList أو لـ DataView أو لـ CrsytalReport أو لـ Microsoft Report أو داخل DataSet أو لأي شيء تشوفة مناسب. عشان تبسط الفكرة خلينا ناخذ مثال: أفرض إننا نبغى ننشئ جدول مكون من حقلين وهما ID من نوع int و Person_Name من نوع string، ونقوم بإدخال بيانات بشكل عشوائي لهذا الجدول وإظهاراها عن طريق GridView و ListView. راح يكون الكود في صفحة التصميم aspx كالتالي:

<h3>Binding our DataTable to GridView</h3>
    <asp:GridView ID="myGridView" runat="server" Width="100%" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="ID" />
            <asp:BoundField HeaderText="Name" DataField="Person_Name" />
        </Columns>
    </asp:GridView>

    <h3>Binding our DataTable to ListView</h3>
    <asp:ListView ID="myListView" runat="server" ItemPlaceholderID="itemPlaceHolder">
        <LayoutTemplate>
            <table width="100%" cellpadding="5px" cellspacing="0">
                <tr>
                    <td style="color: #00f; font-weight: bold">ID</td>
                    <td style="color: #00f; font-weight: bold">Name</td>
                </tr>
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("ID") %></td>
                <td><%# Eval("Person_Name") %></td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

وراح يكون الـ Code Behind في ملف الـ aspx.cs كالتالي:

	protected void Page_Load(object sender, EventArgs e)
    {
        // Creating DataTable instance

        System.Data.DataTable dt = new System.Data.DataTable();

        // Adding columns using DataColumns

        dt.Columns.Add(new System.Data.DataColumn("ID", typeof(int))); // or dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add(new System.Data.DataColumn("Person_Name", typeof(string))); // or dt.Columns.Add("Person_Name", typeof(string));

        // Adding rows using DataRow

        for (int i = 1; i <= 10; i++)
        {
            System.Data.DataRow newRow = dt.NewRow();

	    /*
		The method System.Data.DataTable.NewRow() will return an instance of Syatem.Data.DataRow with the same structure of the calling
		System.Data.DataTable instance. The fields in the newly created instance of System.Data.DataRow can be accessed trough a zero-based index
		or by column name (I prefer column name)
	    */

            newRow["ID"] = i;
            newRow["Person_Name"] = "Person #" + i;

            dt.Rows.Add(newRow); // or dt.Rows.Add(i, "Person #" + i);
        }

        // Binding GridView

        myGridView.DataSource = dt;
        myGridView.DataBind();

        // Binding ListView

        myListView.DataSource = dt;
        myListView.DataBind();
    }

أتمنى أن اكون قد أصبت وأتمنى لك التوفيق والنجاح

------------------------------

مشكور اخي العزيز ... بصراحة شرحك ابداع مرة .. ياغالي .. واحرجتني بتواضعك وطيب اصلك ... والله يجعل هذه في ميزان حسناتك ويرزقك الجنه يــــــــــــــــــارب

مواضيع مشابهة