2015-09-25 5 views
0

Ниже приведен код, который я использую для привязки RadGrid с использованием Stored Procedure.
Я звоню Stored Procedure используя .xsd файл - TableAdapter подходОшибка: не удалось установить ограничения .., когда привязка записей в RadGrid

HTML код:

<telerik:RadGrid ID="rgData" runat="server" ShowFooter="true" 
OnNeedDataSource="rgData_NeedDataSource" 
AllowSorting="True" AllowFilteringByColumn="True" ShowGroupPanel="True" GroupLoadMode="Client" 
EnableEmbeddedSkins="False" ImagesPath="../App_Themes/MetroRed/Grid" Skin="MetroRed"> 
    <ClientSettings AllowDragToGroup="True"></ClientSettings> 
    <GroupingSettings ShowUnGroupButton="false" CaseSensitive="false"></GroupingSettings> 
    <MasterTableView ShowGroupFooter="true" CommandItemDisplay="None" AutoGenerateColumns="false" AllowMultiColumnSorting="true"> 
    <CommandItemSettings ShowAddNewRecordButton="false" /> 
    <Columns> 
      <telerik:GridBoundColumn HeaderText="Billing ID" DataField="BillingID" SortExpression="BillingID" FilterDelay="2000" ShowFilterIcon="false"> 
     </telerik:GridBoundColumn> 
     <telerik:GridBoundColumn HeaderText="Direct Cost" DataField="DCIDescription" SortExpression="DCIDescription" FilterDelay="2000" ShowFilterIcon="false"> 
     </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn HeaderText="Business Unit" DataField="BUName" SortExpression="BUName" FilterDelay="2000" ShowFilterIcon="false"> 
      </telerik:GridBoundColumn> 
    </Columns> 
    </MasterTableView> 
</telerik:RadGrid> 

C# код:

private DataTable _dtData = null; 

protected void rgData_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
    { 
     try 
     { 
      _dtData = SDM.Invoice.GetInvoiceBySPID(_SPID); 
      rgData.DataSource = _dtData; 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

файл класса внутри папки BLL:

#region Invoice 
private static SDM_Invoice _Invoice = null; 
public static SDM_Invoice Invoice 
{ 
    get 
    { 
     if (_Invoice == null) 
     _Invoice = new SDM_Invoice(); 

     return _Invoice; 
    } 
} 
#endregion 

private SDM_Tran_GenerateInvoiceTableAdapter _GenerateInvoiceTableAdapter = null; 
protected SDM_Tran_GenerateInvoiceTableAdapter Adapter 
{ 
    get 
    { 
     if (_GenerateInvoiceTableAdapter == null) 
       _GenerateInvoiceTableAdapter = new SDM_Tran_GenerateInvoiceTableAdapter(); 

      return _GenerateInvoiceTableAdapter; 
    } 
} 

public SDMDAL.SDM_Tran_GenerateInvoiceDataTable GetInvoiceBySPID(string SPID) 
{ 
    return Adapter.GetInvoiceBillingBySPID(SPID); 
} 

хранимых процедур для связывания RadGrid:

ALTER PROCEDURE [dbo].[Select_InvoiceBillingBySPID] 
    @SPID as nvarchar(50) 
    AS 
BEGIN 

    SET NOCOUNT ON; 

SELECT 
--B.ID, 
B.BillingID, 
DCIDescription, 
(SELECT BUName FROM dbo.SDM_Master_BU WITH (NOLOCK) WHERE BUID=AfoBUID) as BUName 

FROM SDM_Tran_Billing B WITH (NOLOCK), 
dbo.SDM_Tran_DCI D WITH (NOLOCK), 
dbo.SDM_Tran_Allocation A WITH (NOLOCK) 

WHERE B.BfoAllocationID=AllocationID 
and A.AfoDCIID=D.DCIID 
and [email protected] 
and B.BfoStatusID=1 

END 

.xsd файл - Table Adapter

enter image description here

Всякий раз, когда я запускаю свою веб-страницу, я получаю ниже ошибки:

Failed to unable constraints. One or more rows contain values violating non null, unique or foreign key constraints.

Я думаю, что ошибка связана с тем, что я привязываю данные в RadGrid, используя 3 разных таблицы (которые имеют свой собственный первичный ключ) в Хранимой процедуре, а затем вызывает этот сохраненный Proc в другом адаптере таблицы, который имеет свой собственный первичный ключ. Но не уверен, правильно ли я понял.

Учтите, что когда я запустил программу Stored Proc в Sql query, она работает нормально, но когда я запускаю свою страницу, я получаю выше ошибки.

Но мне нужно связать RadGrid, используя 3 таблицы (например, выше).

Пожалуйста, дайте мне знать, как устранить эту ошибку. Заранее спасибо.

ответ

0

Заменено ниже строки кода:

_dtData = SDM.Invoice.GetInvoiceBySPID(_SPID); 

с:

_dtData = SDM.Billing.GetBillingBySPID(_SPID); 

так, Invoice TableAdapter/таблица уже имеет первичный ключ в своей таблице базы данных и
я использую другие таблицы базы данных, которая имеет его собственный первичный ключ, с Invoice TableAdapter/Table, поэтому он давал мне ошибку. Проблема решена.