سؤال

أنا حائرة على DataTable.DefaultView.نوعا ما.هنا هو الجزء من الكود أريد أن استخدامه في.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

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

أرى ذلك .DefaultView ترجع الرأي .الجدول يعطي خطأ ترجمة.

هل كانت مفيدة؟

المحلول 3

واضطررت الى اتخاذ نهج مختلف قليلا. كان هذه الوظيفة الأقرب يمكن أن تجد لي للحصول على قانون بلدي للعمل. هنا هو نتيجة العمل:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

ومن هناك أنا فقط يجب أن تحويل قيمة العودة الى انها نوع المناسبة.

(string)logRow["Status"].ToString()

نصائح أخرى

actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();

والفرز الرأي لن يغير من ترتيب البيانات في الجدول، فقط الأمر في طريقة العرض. يجب أن يعمل إذا كنت تفعل foreach الخاصة بك على وجهة النظر بدلا من ذلك، صب الصف من DataRowView إلى الخاص التوالي المكتوبة بشدة.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }

وبالإضافة إلى ذلك، وبما أنه بدا وكأنه كنت تريد أن يتكرر خلال السجلات، يمكنك فقط حلقة من خلال الكائنات dataRowView في DefaultView.

foreach (DataRowView drv in table.DefaultView)
{
    string strValue = drv["ColumnName"].ToString();
    // its also worth mentioning that a DataRowView has a Row
    strValue = drv.Row["ColumnName"].ToString();
}

يرجى حاول هذا:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";

مجرد فضول:لماذا تستخدم DataRowView?

أي

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}

إذا كنت في حاجة الى DataTable وقتها يمكنك أن تفعل شيئا مثل:

var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";

actionLogDT = dv.ToTable();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top