2012-02-15 9 views
5

में डातालिस्ट नियंत्रण का उपयोग कर SQL सर्वर डेटाबेस से ग्राहकों को प्रदर्शित करना मुझे 1000 ग्राहकों की एक सूची मिली है जो मैं एएसपीनेट में एक डातालिस्ट नियंत्रण के माध्यम से प्रदर्शित कर रहा हूं। सूची प्रति पृष्ठ एक ग्राहक दिखाता है।एएसपीनेट

क्वेरी मैं बाध्य डेटा सूची का उपयोग कर रहा है:

static public DataTable GetAllCustomers() 
{ 
    string sql = "Select * from [Customers]"; 
    SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    return dt; 
} 

मुझे क्या करना चाहते हैं एक बार ग्राहक देखा जाता है यह सूची में सबसे नीचे के लिए वापस जाना चाहिए, ताकि उपयोगकर्ता एक बार दूसरी बार लॉग इन किया गया, उसे उसी ग्राहक को देखने से शुरुआत नहीं करना पड़ेगा, देखे गए ग्राहकों को 1000 ग्राहक सूची के नीचे जाना चाहिए, उदाहरण के लिए यदि ग्राहक 1 बार देखा जाता है, अगली बार ग्राहक 1 1000 ग्राहक बनना चाहिए और ग्राहक 2 ग्राहक बनना चाहिए 1, उम्मीद है कि यह समझ में आता है।

इस परिदृश्य को प्राप्त करने के तरीके पर किसी भी सुझाव या सहायता की सराहना की जाएगी & मुझे यह प्राप्त करने के लिए डीबी और क्वेरी में क्या परिवर्तन करना है।

+0

क्या आप ग्राहक डेटा के अपडेट कर रहे हैं? क्या कई लोग एक साथ ग्राहकों को देख रहे हैं? यदि आप अपडेट कर रहे हैं तो आप "आखिरी अपडेटेड" फ़ील्ड को उस क्वेरी और ऑर्डर में जोड़ सकते हैं - जो कुछ भी नहीं बदला गया है, वह प्रति उपयोगकर्ता पहले – kaj

+0

दिखाई देगा? या सभी उपयोगकर्ताओं के लिए एक ही है? – Aristos

+0

@KAJ ये एक ही समय में लॉग इन किए गए कई उपयोगकर्ता हैं, लगभग 5, इसके अलावा एक वैकल्पिक अद्यतन विकल्प उपलब्ध है –

उत्तर

1

ग्राहक कब्जा वर्तमान दिनांक और उपयोग छँटाई, orderby datetime आरोही क्रम

+0

मुझे कैसे पता चलेगा कि ग्राहक को देखा गया है? –

+0

वे वहां से उस पंक्ति का चयन कर सकते हैं जिसे हम कैप्चर कर सकते हैं या आप ईवेंट का उपयोग कर सकते हैं – Prabhavith

1

देखा जाता है तो एक ही तालिका में एक नया कॉलम बनाएं। जब भी आप ग्राहक अद्यतन है इस के लिए वर्तमान दिनांक और समय नव निर्मित स्तंभ के साथ ग्राहक को देखना

ALTER TABLE YourTableName 
ADD NewColumnName DATETIME DEFAULT getdate() 

नव निर्मित स्तंभ सभी मूल्यों शुरू में वर्तमान दिनांक और समय के द्वारा अद्यतन होना चाहिए। इसका अर्थ यह है कि इस कॉलम का डिफ़ॉल्ट मान GetDate()

जब आप डेटाबेस से सभी रिकॉर्ड को कॉलम द्वारा क्रमबद्ध करेंगे। इस प्रकार आप शीर्ष हर समय unviewed ग्राहकों होगा ...

static public DataTable GetAllCustomers() 
{ 
    string sql = "Select * from [Customers]"; 
    using (SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString)) 
    { 
     using (DataTable dt = new DataTable()) 
     { 
      da.Fill(dt); 
      return dt; 
     } 
    } 
} 

आशा यह आप में मदद मिलेगी ...

1

सबसे पहले आप कहीं क्या पिछले CustomterID कि तुम्हें दिखाता है याद करने की आवश्यकता है, और आपके ग्राहकों की अधिकतम पंक्तियां।

मान लें कि LastCustomerID -> CuLast और Max पंक्तियां -> CuMax, तो SQL समान हो सकता है।

WITH CustomersNewOrder as (
select *, CustomerID-CuLast as OrderMe from Customers where CustomerID > CuLast 
union 
select *, CustomerID+CuMax as OrderMe from Customers where CustomerID <= CuLast 
) select * from CustomersNewOrder order by OrderMe 

भी When the CuLast > CuMax then make the CuLast = 0

क्या मैं यहाँ करना संख्या पिछले 0 से शुरू कर रहा है यह है कि, और है जो आपको सूची की अधिकतम के बाद सभी के लिए तैयार शो शुरू किया है।

इस तरह आप डेटाबेस को अद्यतन बनाने के लिए की जरूरत नहीं है, और केवल एक ही नंबर याद रखने, पिछले एक तुम्हें दिखाता हूँ की जरूरत है।

क्योंकि आप कहते हैं कि आप सभी उपयोगकर्ताओं के लिए समान हैं, और मुझे लगता है कि आपके पास केवल एक पूल है, फिर वैश्विक अंतरिक्ष पर कहीं भी एक स्थिर मूल्य वह काम कर सकता है जो पिछले एक शो को बनाए रखता है।