سؤال

أحتاج إلى إنشاء مربعات نصية ديناميكيًا حيث يحدد المستخدم NO .. في الواقع ، هناك مربعان نصين في صف .. يحدد المستخدم أي صفوف مطلوبة .. كما يجب إضافة مربعات نصية محددة (لكل صف) إلى النموذج وأيضًا أحتاج إلى ذلك اقرأ النص الذي تم إدخاله لاحقًا .... ما هي أفضل طريقة ؟؟

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

المحلول

إذا كان عدد مربعات النص ثابتًا ولكن عدد الصفوف ديناميكية ، فاستخدم GridView. ثم ربط GridView بقائمة أو صفيف من الطول الذي حدده المستخدم. ستقوم GridView بعد ذلك بتقديم الصفوف المحددة ويمكنك الحصول على القيم من مربعات النص على Postback.

نصائح أخرى

Control.Controls.Add(new TextBox());

ملاحظات:

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

لإضافة عناصر تحكم إلى صفحة ASPX ديناميكيًا ، اتبع هذه الخطوات.

أولاً ، أضف عنصرًا نائبًا على صفحة ASPX:

<asp:PlaceHolder runat="server" id="AssessCanvas" />

يسمى الألغام "assalcanvas". بعد ذلك ، أضف الضوابط نفسها. فيما يلي رمز أستخدمه في الأساليب التي يطلق عليها Page_Load لإنشاء تسمية ومربع نص. التسمية هي موجه لـ "الوزن:" ويتم استخدام مربع النص لإدخال قيمة الوزن (في المثال ، أنا أيضًا تضمن قيمة للوزن عندما أقوم بإنشاء المربع):

Label aLbl = new Label { Text = "Weight: ", ID = ("WSLabel" + counter) };
counter++;
AssessCanvas.Controls.Add(aLbl);

TextBox aBox = new TextBox { ID = "XTest1", Columns = 5, Text = weight.ToString("##0.0"), Width = 50 };
AssessCanvas.Controls.Add(aBox);

أستخدم "wslabeln" (حيث N هو رقم) لإعطاء معرف فريد لكل تسمية. لأنني سأرغب في مسح جميع مربعات النص الخاصة بي لسحب محتوياتها عند تقديم النموذج ، أعطي كل منهم معرفًا من النموذج "Xtestn" (حيث N هو معرف فريد لكل حقل - هنا "Xtest1 "يخبرني أن هذا هو مجال الوزن).

عندما أكون مستعدًا للتعامل مع النموذج إرسال ، أفعل هذا:

// Look at each key submitted with the form - *some* of these will be my input text boxes
foreach (string aStr in form.AllKeys)
{
    // Is this an input text box?  Yes if it has "XTest" in it somewhere.
    int position = aStr.IndexOf("XTest");
    if (position > 0)
    {
        // The data entry fields for each input box follows the format: <ASP.NET Prefix>XTest<TID>
        // Here I get the tid so I know what to do with the value that was entered 
        short tid = BSDIUtil.StrToIntDef(aStr.Substring(position + 5));
        switch (tid)
        {
            case 1: SaveWeight(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            case 2: SaveJP3P1(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            ... etc...
         }
     }
}

في نظامي ، غالبًا ما يجب أن أضع عدة حقول على الصفحة لجمع القيم لعنصر اختبار واحد (يأتي النظام هنا من صفحة اختبار اللياقة). على سبيل المثال ، "SaveJP3P1" أعلاه لا يسمى كما هو موضح لأنه يسحب البيانات بالفعل من تسع مختلف المجالات. لقد قمت بتبسيطه للمثال لأسباب واضحة.

هذا النهج يمنحك أ عظيم صفقة من المرونة. في صفحتي الكاملة ، لديّ مربعات فحص ، وعلامات الرأس (على سبيل المثال تسمية مع تنسيق HTML/CSS بالإضافة إلى نص التسمية) ، وحتى العديد من DIVs لاختبارات اللياقة مع لوحات متعددة لإدخالها. و الكل يتم ذلك بشكل ديناميكي. من الواضح أن الشبكة لن تنجح ولن ستضيف عنصر تحكم إلى شجرة التحكم كما اقترح آخرون.

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