منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : اختيار 3 اسماء عشوائية
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
هناك اسماء معروضة في الجريد 1
كيف اختار 3 او اربعة اسماء عشوائية ويعرضوا في الجريد2

حاولت ولكن هناك خطا
  DataGridView2.Columns(0).HeaderText = "الرقم"
        DataGridView2.Columns(1).HeaderText = "الاســم"
        DataGridView2.Columns(2).HeaderText = "الهاتـف"
        DataGridView2.Columns(3).HeaderText = "الجـوال"
        Dim rn As New Random
        Dim xlist As New List(Of Integer)
        DataGridView2.Columns.Add("ddd", "")
        DataGridView2.Rows.Clear()
        Do While xlist.Count < 3
            Dim x As Integer = rn.Next(0, ds.Tables("emp").Rows.Count)
            If Not xlist.Contains(x) Then
                xlist.Add(x)
            End If
        Loop
        xlist.Sort()
        For Each xx As Integer In xlist
            If DataGridView2.Columns.Count > 1 Then
                MsgBox("")
            End If
            DataGridView2.Rows.Add(ds.Tables("emp").Rows(xx).ItemArray)
        Next
السادة هل من رد
هل مطلوب توضيح اكثر
ارفق مشروع مصغر للشاشة التى تتحدث عنها
حتى اقوم بكتابة الكود لك الذى يناسب لما لديك من مسميات وادوات فى الفورم

تحياتى لك
وتمنياتى لك التوفيق
المشروع
برجاء التعديل
للعلم
تم رفع المثال برجاء التعديل ايها الوميل االفاضل
جميل جداً لكن سامحنى غير قادر على اعادة رفع المشروع
حيث ان المشروع المرفق الاصدار 9 

على اى حال ساشرح ما التعديلات التى ستقوم بفعلها بكل يسر وبدون اى مشكلة

تعال على السطر التالى
كود :
   Dim ds As New DataSet

واستبدله بهذا السطر
كود :
   Dim ds, ds2 As New DataSet

ناتى على السطر التالى
كود :
   Dim da As New OleDbDataAdapter

واستبدله بهذا السطر
كود :
   Dim da, da2 As New OleDbDataAdapter

الان ناتى على هذا السطر
كود :
   Dim req As String = "SELECT id,name,code,group from emp"

اسفل منه مباشراً قم باضافة هذا السطر
كود :
   Dim raq As String = "SELECT Top 3 id,name,code,group from emp ORDER BY Rnd(-(100000*id)*Time())"

الان تعال فى حدث الزر وهو Button1_Click
قم باضافة هذا الكود به
كود :
       If Conn.State = ConnectionState.Open Then Conn.Close()
       ds2.Clear()
       Dim comd As New OleDbCommandBuilder(da2)
       da2.SelectCommand = New OleDbCommand(raq, Conn)
       da2.Fill(ds2, "emp")
       Me.DataGridView2.DataSource = ds2.Tables("emp")

هل تلاحظ شئ
تماماً كده انا طبقت كودك فى اللود الخاص بالفورم لجلب البيانات من قاعدة البيانات
ليقوم بنفس الامر فى الزر ليقوم باستدعاء نفس الامر فى الداتا جريد 2 لكن كل ما تم هو

تغيير كود الاستعلام ليقوم بجلب 3 بشكل عشوائي من خلال تحويل كود الاستعلام الافتراضى
PHP كود :
SELECT id,name,code,group from emp 

الى ان يكون بهذا الشكل
كود :
SELECT Top 3 id,name,code,group from emp ORDER BY Rnd(-(100000*id)*Time())

الان كل ما عليك اذا كنت تريد عرض 5 بدلاً من 3 
ستقوم بتغيير رقم 3 فى كود الاستعلام لتجعله 5 فقط ليس اكثر

الامر الان اصبح بسيط اليس كذلك  Smile

كود الفورم كاملاً للمشروع بعد التعديل واضافة الكود الذى تم شرحه بالاعلى
كود :
Imports System.Data.OleDb
Public Class Form1
   Dim Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" & Application.StartupPath & "\emp.mdb")
   Dim dr As OleDbDataReader
   Dim ds, ds2 As New DataSet
   Dim da, da2 As New OleDbDataAdapter
   Dim cmd As OleDbCommand
   Dim comb As OleDbCommandBuilder
   Dim req As String = "SELECT id,name,code,group from emp"
   Dim raq As String = "SELECT Top 3 id,name,code,group from emp ORDER BY Rnd(-(100000*id)*Time())"
   Dim dt As New DataTable

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       If Conn.State = ConnectionState.Open Then Conn.Close()
       ds.Clear()
       Dim comd As New OleDbCommandBuilder(da)
       da.SelectCommand = New OleDbCommand(req, Conn)
       da.Fill(ds, "emp")
       Me.DataGridView1.DataSource = ds.Tables("emp")
       'Dim DataGridView2 As New DataGridView
       'Dim DataTable2 As New DataTable
       'DataGridView2.DataSource = DataTable2


       'DataGridView2.Columns.Add("aaa", "الاسم")
       'DataGridView2.Columns(0).HeaderText = "الرقم"
       'DataGridView2.Columns(1).HeaderText = "الاســم"
       'DataGridView2.Columns(2).HeaderText = "الهاتـف"
       'DataGridView2.Columns(3).HeaderText = "الجـوال"

       
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If Conn.State = ConnectionState.Open Then Conn.Close()
       ds2.Clear()
       Dim comd As New OleDbCommandBuilder(da2)
       da2.SelectCommand = New OleDbCommand(raq, Conn)
       da2.Fill(ds2, "emp")
       Me.DataGridView2.DataSource = ds2.Tables("emp")
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

   End Sub

   Private Sub DataGridView2_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)

   End Sub
End Class


تحياتى لك
وتمنياتى لك التوفيق
شكرا
لكن كيف استخدم
randomize
بدلا من الوقت

لاني مش فاهم الهدف منها
وكيف استخدمت
الشكر لله والحمد لله
ولحمد لله على كل حال


بخصوص الـ Rnd المستخدم عن طريقة
كود :
Rnd(-(100000*id)*Time())

فهو كما فى الكود بالاعلى
والمعروف دائماً الشكل المثالى بهذا الشكل
كود :
((6 * Rnd()) + 1)

ولكم لمذا استخدم -100000 و time فى التوليد الرقم العشوائي
وهنا لاتمام انشاء رقم جديد كل ثانية حتى يتثنى مع كل تحديث عمل ترتب مختلف عن ما سبق

وستجد id وسط الارقام وهو المقصود بها رقم التسلسل لعمود id

يمكنك مراجعة الرابط التالى
https://docs.microsoft.com/en-us/dotnet/....randomize

تحياتى لك
وتمنياتى لك التوفيق
لانها اقرب في الفهم والتركيب
هل استطيع استخدام randomize

ولكي استخدمها في المستقبل
واذا  لا
انا اسف علي التعب
وشكرا

Randomize()

        raq = " SELECT Top 3 id,name,code,group from emp ORDER BY Int((id*6 * Rnd()) + 1)"
هذا الكود ينفذ مرة واحدة
الصفحات : 1 2