23-02-21, 09:44 PM
السلام عليكم
أحاول عمل نظام الصفحات مطور وسلس ل Datagridview ، لقد قمت بالفعل بعمل ذلك وهو يعمل بشكل جيد ، لكن المشكلة هي عندما أحاول البحث عن سجلات من قاعدة البيانات ، المشكلة هي أن Datagridview لا تقوم بعرض البيانات التي يتم إرجاعها من قاعدة البيانات عند عملية البحث.
احتاج بعض الاقتراحات أو مشاركة فكرة جديدة لتحقيق المطلوب أو المساعدة في المشكلة الحالية.
هنا فيديو يوضح المشكلة :
احتاج بعض الاقتراحات أو مشاركة فكرة جديدة لتحقيق المطلوب أو المساعدة في المشكلة الحالية.
هنا فيديو يوضح المشكلة :
و هنا الكود المستخدم :
custom datagridview class :
custom datagridview class :
كود :
class GV_Paging : Guna.UI2.WinForms.Guna2DataGridView
{
public int PageSize
{
get
{
return _pageSize;
}
set
{
_pageSize = value;
}
}
public int _pageSize = 10;
BindingSource bs = new BindingSource();
BindingList<DataTable> tables = new BindingList<DataTable>();
public void SetPagedDataSource(DataTable dataTable, BindingNavigator bnav)
{
DataTable dt = null;
int counter = 1;
foreach (DataRow dr in dataTable.Rows)
{
if (counter == 1)
{
dt = dataTable.Clone();
tables.Add(dt);
}
dt.Rows.Add(dr.ItemArray);
if (PageSize < ++counter)
{
counter = 1;
}
}
bnav.BindingSource = bs;
bs.DataSource = tables;
bs.PositionChanged += Bs_PositionChanged;
Bs_PositionChanged(bs, EventArgs.Empty);
}
void Bs_PositionChanged(object sender, EventArgs e)
{
this.DataSource = tables[bs.Position];
}
}
طريقة تعبئة البيانات في ال Datagridview:
كود :
// set the page row count size automatically
GV.PageSize = Convert.ToInt32(Math.Floor(Convert.ToDecimal(GV.Height / GV.RowTemplate.Height))) - 1;
DT = DBConn.ExecuteDataTable("select_all_materials", CommandType.StoredProcedure);
GV.SetPagedDataSource(DT, bindingNavigator1);
الكود الخاص بعمية البحث:
كود :
GV.PageSize = Convert.ToInt32(Math.Floor(Convert.ToDecimal(GV.Height / GV.RowTemplate.Height))) - 1;
DT = DBConn.ExecuteDataTable("search_materials_by_category_name", CommandType.StoredProcedure, new SqlParameter[] { new SqlParameter("@name", Categorys_comb.Text) });
GV.SetPagedDataSource(DT, bindingNavigator1);
وهنا الكود الخاص بال Datatable
كود :
public static DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] parameters)
{
using (DataTable dt = new DataTable())
using (SqlConnection connStr = new SqlConnection(ConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, connStr))
{
cmd.CommandType = cmdType;
cmd.Parameters.AddRange(parameters);
try
{
cmd.Connection.Open();
new SqlDataAdapter(cmd).Fill(dt);
}
catch (SqlException ex)
{
//log to a file or Throw a message ex.Message;
MessageBox.Show("Error: " + ex.Message);
}
return dt;
}
}
المشكلة كما موضح في الفيديو انة لا يتم جلب البيانات بنائا على نتائج البحث
مع العلم ان النتائج المرجعة صحيحة و تظهر في عدد الاسطر و تظهر في نتائج
الطباعة كما موضح بالقيديو لكن لا تضهر في الـ Datagridview
مع العلم ان النتائج المرجعة صحيحة و تظهر في عدد الاسطر و تظهر في نتائج
الطباعة كما موضح بالقيديو لكن لا تضهر في الـ Datagridview