زر جديد الخارجية المجالات الرئيسية في البيانات الديناميكية

StackOverflow https://stackoverflow.com/questions/1622330

  •  06-07-2019
  •  | 
  •  

سؤال

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

كيف يمكن أن تذهب حول إضافة "الجديد" رابط/زر المفتاح الخارجي حقل قالب, هذا من شأنه أن يفتح نافذة جديدة (جعل لوحة مرئية) حيث يمكنك إضافة سعى القيمة ، ومن ثم تحديث القائمة المنسدلة?

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

المحلول

يعني مثل في جانغو المشرف ui ;).أنا حاليا أحاول أن تنفيذ هذه الميزة سوف وظيفة الكود هنا إذا كنت الحصول على عمل.

تحرير:

حسنا, لقد حصلت على هذا العمل, كاملة أسلوب جانغو...انها كيندا طويلة لشرح ولكن بسيطة في الواقع.

الملفات لإنشاء:

أ admin_popup.سيد سعيد المنبثقة الصفحة (نسخ المشرف.ماستر بدون رأس).

أ popup_Insert.aspx مع admin_popup.درجة الماجستير.(نسخ إدراج.aspx)

التعديلات

إلى المشرف.الماجستير.cs:هذا إضافة:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "refresh_fks", @"
    var fk_dropdown_id;
    function refresh() {
        __doPostBack(fk_dropdown_id,'refresh');
    };", true);
}

في admin_popup.ماجستير ، إضافة هذه الصفات إلى الجسم الوسم (انها تستخدم لتغيير حجم poup)

<body style="display: inline-block;" onload="javascript:resizeWindow();">

في admin_popup.الماجستير.cs

protected override void  OnInit(EventArgs e)
{
    base.OnInit(e);

    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "refresh_fks", @"
    var fk_dropdown_id;
    function refresh() {
        __doPostBack(fk_dropdown_id,'refresh');
    };", true);

    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "resize_window", @"function resizeWindow() {
        window.resizeTo(document.body.clientWidth + 20, document.body.clientHeight + 40);
        window.innerHeight = document.body.clientHeight + 5;
        window.innerWidth = document.body.clientWidth;
    }", true);

    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "update_parent", @"function updateParent() {
        window.opener.refresh();
    }", true);        
}

في popup_Insert.aspx.cs, محل هاتين الوظيفتين:

protected void DetailsView1_ItemCommand(object sender, DetailsViewCommandEventArgs e) {
    if (e.CommandName == DataControlCommands.CancelCommandName)
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Close_Window", "self.close();", true); 
}

protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e) {
    if (e.Exception == null || e.ExceptionHandled) {
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Close_Window", "window.opener.refresh(); self.close();", true); 
    }
}

في ForeignKey_Edit.ascx, إضافة زر ارتباط (ID=LinkButton1) و في ForeignKey_Edit.ascx.cs استبدال تلك الوظيفة

protected void Page_Load(object sender, EventArgs e) {
    if (DropDownList1.Items.Count == 0)
    {
        if (!Column.IsRequired) {
            DropDownList1.Items.Add(new ListItem("[Not Set]", ""));
        }

        PopulateListControl(DropDownList1);
        LinkButton1.OnClientClick = @"javascript:fk_dropdown_id = '{0}';window.open('{1}', '{2}', config='{3}');return false;".FormatWith(
            DropDownList1.ClientID,
            ForeignKeyColumn.ParentTable.GetPopupActionPath(PageAction.Insert),
            "fk_popup_" + ForeignKeyColumn.ParentTable.Name, "height=400,width=600,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no");
    }
    if (Request["__eventargument"] == "refresh")
    {
        DropDownList1.Items.Clear();
        if (!Column.IsRequired)
        {
            DropDownList1.Items.Add(new ListItem("[Not Set]", ""));
        }

        PopulateListControl(DropDownList1);
        DropDownList1.SelectedIndex = DropDownList1.Items.Count - 1;
    }
}

وأخيرا اثنين من لواحق وظائف يمكنني استخدام (ضعه حيث تريد):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Web.DynamicData;
using System.Web.UI;

public static class Utils
{
    [DebuggerStepThrough]
    public static string FormatWith(this string s, params object[] args)
    {
        return string.Format(s, args);
    }

    public static string GetPopupActionPath(this MetaTable mt, string action)
    {
        return new Control().ResolveUrl("~/{0}/popup_{1}.aspx".FormatWith(mt.Name, action));
    }
}

في عالمي الخاص.asax, تسجيل المسار الجديد عن طريق تغيير هذا الخط:

Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert|popup_Insert" }),

طيب أنا أتمنى أن لا أكون نسيت أي شيء...فإنه بالتأكيد يمكن تحسينها ، لكنه يعمل.حسنا آمل أن بعض الناس سوف fint مفيدة, يجعل ASP.NET البيانات الديناميكية أكثر ;).أنا goind أن نلقي نظرة على العديد إلى العديد من العلاقات الآن.

نصائح أخرى

عناية:VB.net المستخدمين

إذا كنت مثلي و دخن في الفم على الطريقة الملتوية و فوضى البيانات الديناميكية ، وهذا هو لك!لقد استغرق مني أكثر من 100 ساعة فقط إلى معرفة أساسيات دد (على الرغم من أنني ضليع جدا في برمجة قواعد البيانات techiniques).

غيوم الحل هو أسهل بكثير من نوتن هو بالنسبة لنا.بعد 15+ ساعات من محاولة ترجمة نوتن ما حاولت ترجمة غيوم البرمجية التي استغرق مني 2 ساعة فقط للحصول على عمل.هنا هو في نفس الأمر.(ملاحظة:cs امتداد بالطبع ترجمة vb ملحقات)

  1. تجاهل الادارة.الماجستير.cs الاتجاهات.

  2. هل admin_popup.ماجستير قانون.إذا كنت لا تزال في مقابل 2008 أو أكثر سوف تحصل على CSS خطأ على مضمنة كتلة الاقتباس.تجاهل الخطأ.

  3. الملف الرئيسي OnInit الفرعية:

    Protected Overrides Sub OnInit(ByVal e As EventArgs)
    MyBase.OnInit(e)
    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType, "refresh_fks", "     var fk_dropdown_id;     function refresh() {         __doPostBack(fk_dropdown_id,'refresh');     };", True)
    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType, "resize_window", "function resizeWindow() {         window.resizeTo(document.body.clientWidth + 120, document.body.clientHeight + 120);         window.innerHeight = document.body.clientHeight + 5;         window.innerWidth = document.body.clientWidth;     }", True)
    System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, Page.GetType, "update_parent", "function updateParent() {        window.opener.location.reload(true);     }", True)
    

    End Sub

  4. محل الأحداث في (popup_Insert.aspx.vb) تحت الصفحات المخصصة الخاصة بك مع هذا:

    Protected Sub DetailsView1_ItemCommand(ByVal sender As Object, ByVal e As DetailsViewCommandEventArgs)
    If e.CommandName = DataControlCommands.CancelCommandName Then
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(Me, Me.GetType, "Close_Window", "self.close();", True)
    End If
    

    End Sub Protected Sub DetailsView1_ItemInserted(ByVal sender As Object, ByVal e As DetailsViewInsertedEventArgs) إذا هـ.استثناء شيء OrElse هـ.ExceptionHandled ثم النظام.ويب.واجهة المستخدم.ScriptManager.RegisterClientScriptBlock(لي لي.GetType, "Close_Window" ، "نافذة.الافتتاحية.موقع.تحديث(صحيح) ؛ النفس.close();", True) End If End Sub

  5. إنشاء مخصص FieldTemplate من ForeignKey_Edit وتسميته ForeignLinkKey_Edit.ascx.بعد dropdownlist1 السيطرة ، إضافة إلى اثنين من المساحات ( ) ثم خلق asp:LinkButton كما ذكر.وضع النص مثل "إضافة __" أو شيء من هذا القبيل.استبدال الصفحة تحميل وظيفة مع هذا:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    If DropDownList1.Items.Count = 0 Then
        If Not Column.IsRequired Then
            DropDownList1.Items.Add(New ListItem("[Not Set]", ""))
        End If
        PopulateListControl(DropDownList1)
    
        LinkButton1.OnClientClick = "javascript:fk_dropdown_id = '" & DropDownList1.ClientID & _
    

    "';window.open('" & ForeignKeyColumn.ParentTable.GetActionPath("إدراج").Replace("Insert.aspx", "popup_Insert.aspx") & _ "', '" & "fk_popup_" & ForeignKeyColumn.ParentTable.اسم & "', config='" & _ "height=400,width=400,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no" & "');return false;" End If إذا طلب("__eventargument") = "refresh" ثم DropDownList1.البنود.واضحة() إذا لم العمود.ل Requi أحمر ثم DropDownList1.البنود.Add(New عنصر القائمة("[تعيين]", "")) End If PopulateListControl(DropDownList1) DropDownList1.SelectedIndex = DropDownList1.البنود.عد - 1 End If End Sub

  6. تجاهل امتداد وظائف.

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

وأي ميزات جديدة في البيانات الديناميكي في VS2010 RC؟ سوف لا يزال يتعين علينا اللجوء إلى الخارقة مثل هذه لبسيطة ماجستير التفاصيل في البيانات الديناميكي تحت هذا RC؟

ونتطلع الى بعض بلوق وظائف على DD تحت VS2010 RC ...

scroll top