2013-04-11 68 views
0

我有一個SQL Server數據庫,它有很多表。 每個表都有一個主列,實際上它是一個GUID列。 我已經創建了新的ASP.NET動態數據站點來管理這些表。問題是,沒有生成GUID,這就是爲什麼該網站中斷所有表格的原因。如何使用ASP.NET動態數據創建網站時自動生成GUID?

我嘗試通過在SQL表中添加「newID()」,但它仍然失敗。 我相信我需要以某種方式在代碼中進行更改。我相信這可能是許多使用ASP.Net動態網站的開發人員所面臨的問題。想知道如何解決這個問題?

回答

0

我想我欺騙了,但我剛剛創建了一個新的GUID字段模板。 使用爲您的課程創建擴展元數據。這裏顯示縮短的版本。並將其與您的班級相關聯。

然後將GUID.ascx和GUID_Edit.ascx添加到您的項目中。當你插入一條新記錄時,一個GUID將被生成並顯示在你的表格中。關鍵是使UIHint成爲GUID類型。下面

代碼...

--- EventCalendarMetadata.cs

namespace DFEventsWeb 
{ 
    [MetadataType(typeof (EventCalendar_Metadata)) ] 
    public partial class EVENT_CALENDAR 
    { 
     [DisplayName("EVENTS")] 
     private abstract class EventCalendar_Metadata 
     { 
      [Display(Name = "ID")] 
      [UIHint("GUID")] 
      public object EVENT_ID { get; set; } 

.... other fields removed ... 
     } 
    } 
} 

--- GUID.ascx

<%@ Control Language="C#" CodeBehind="GUID.ascx.cs" Inherits="DFEventsWeb.GUID" %> 
<asp:Literal runat="server" ID="Literal1" Text="<%# FieldValueString %>" /> 

--- GUID.ascx.cs 命名空間DFEventsWeb {

public partial class GUID : System.Web.DynamicData.FieldTemplateUserControl 
    { 
     private const int MAX_DISPLAYLENGTH_IN_LIST = 100; 

     public override string FieldValueString 
     { 
      get 
      { 
       string value = base.FieldValueString; 
       if (ContainerType == ContainerType.List) 
       { 
        if (value != null && value.Length > MAX_DISPLAYLENGTH_IN_LIST) 
        { 
         value = value.Substring(0, MAX_DISPLAYLENGTH_IN_LIST - 3) + "..."; 
        } 
       } 
       return value; 
      } 
     } 

     public override Control DataControl 
     { 
      get 
      { 
       return Literal1; 
      } 
     } 
    } 
} 

--- GUID_Edit.ascx

<%@ Control Language="C#" CodeBehind="GUID_Edit.ascx.cs" Inherits="DFEventsWeb.GUID_EditField" %> 
<asp:Literal ID="Literal1" runat="server" Text='<%# OVERRIDE_GUID %>'></asp:Literal> 

--- GUID_Edit.ascx.cs

namespace DFEventsWeb 
{ 
    public partial class GUID_EditField : System.Web.DynamicData.FieldTemplateUserControl 
    { 
     const int MAX_TEXT_COLUMN_SIZE = 200; // jeh 

     string m_GUIDString; 
     public string OVERRIDE_GUID 
     { 
      get { return m_GUIDString; } 
      set { m_GUIDString = value; } 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     protected override void OnDataBinding(EventArgs e) 
     { 
      base.OnDataBinding(e); 
      OVERRIDE_GUID = (FieldValueEditString.Length <= 0 ? System.Guid.NewGuid().ToString() : FieldValueEditString); 
     } 

     protected override void ExtractValues(IOrderedDictionary dictionary) 
     { 
      dictionary[Column.Name] = ConvertEditedValue(Literal1.Text); 
     } 

     public override Control DataControl 
     { 
      get 
      { 
       return Literal1; 
      } 
     } 
    } 
} 
0

我在~PageTemplates \ Insert.aspx中的FormView控件的「插入」事件中添加了以下代碼。

e.Values.Add("Id", Guid.NewGuid()); 

正如我所有的表都有一致的命名convension作爲ID代表PK列,我很好利用這個硬編碼的列名,否則,你可能需要編寫適當的邏輯尋找PK列。