سؤال

أنا أستخدم FormView مع ObjectDataSource وملزمة باستخدام <٪ # BIND ("Whateprop")٪> - وجميع أعمدة Nullable التي تعود إلى القيم الافتراضية للنوع فيها.

يبدو أن كائن FormView لا يحتوي على خاصية Convertemtemtpystringtonull مثل حاويات ربط أخرى. لقد وجدت مقالات تشير إلى أن هذا كان علة في VS 2005 / .NET 2.0 - ولكن لا ترى أي قول ما كان القرار.

هل لدى أي شخص أي اقتراحات حول كيفية العمل حول هذا دون إعادة التقاط جميع الحقول فقط في حدث ODS_Inserting؟ أفضل أن لا أضطر إلى كتابة التعليمات البرمجية لإعادة ربط جميع حقلي ملزمة النموذج فقط لاختبار Nulls.

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

المحلول

كافح معها أيضا. للحصول على القائمة المنسدلة، أفعل ذلك:

AppendDataBoundItems="true"


<asp:ListItem Text="" Value=""></asp:ListItem>

بالنسبة إلى ObjectDATASource، حتى Thoug Took UpdateMethod يأخذ معلمة واحدة، والكيان، وأضيف أيضا تحديثات التحديث لكل حقل غير قابلة للانهيا من الكيان مع تحويل إلى NULL

<UpdateParameters>
    <asp:Parameter Name="No_Empl_Ferme" Type="Int32" ConvertEmptyStringToNull="true" />
</UpdateParameters>

أنا أفعل الشيء نفسه بالنسبة إلى إدراج.

يعمل بشكل جيد.

نصائح أخرى

انتهى بي الأمر في القيام بذلك - نوع من نهج البندقية، ولكن في هذه الحالة الكل من قيمتي الفارغة، يجب أن تكون قيمتي فارغة. لقد فكرت أيضا في استخدام صفيف سلسلة في التعليمات البرمجية لتحديد القيم التي يجب إبطالها - ثم يمكن فقط حلقة من خلال صفيف السلسلة بدلا من جميع القيم.

protected void RequestItemFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
    for (int i = 0; i < e.Values.Count - 1; i++)
    {
        if (e.Values[i].ToString() == string.Empty)
        {
            e.Values[i] = null;
        }
    }
}

في مصدر بيانات الكائن الخاص بك، تحتاج إلى إضافة InsertPharameters لكل نوع من النوع الخاص بك مع Convertemtpystemtpystringtonull = "True":

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>

Quote: Tonio - أنا لا أستخدم بالمعارف الفردية، ولكن DataBjectTyPename بدلا من ذلك. تأخذ طريقة الإدراج الخاصة بي عمارة واحدة، وهذا هو كائن العمل الذي أريد أن أحفظه مرة أخرى إلى قاعدة البيانات. - سكوت Ivey 1 مايو في الساعة 12:57

لقد قمت بإصلاحها مثل هذا:

 protected void FormViewSettings_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {
     OrderedDictionary values = e.NewValues as OrderedDictionary;

     var personID = values["PersonID"];

     if (string.IsNullOrEmpty(personID.ToString()))
     {
        values.Remove("PersonID");
        values.Add("PersonID", null);
     }
  }

إنه اختراق صغير ولكنه يعمل بشكل جيد. بهذه الطريقة يمكنك تعيين خاصية الكائن إلى NULL بدلا من String.Ampty دون استخدام إعداد ConvertemptystringTonull.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top