Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > TableAdapter Join table ไม่สามารถ Update ได้ ต้องทำอย่างไรหรอครับ



 

TableAdapter Join table ไม่สามารถ Update ได้ ต้องทำอย่างไรหรอครับ

 



Topic : 027464



โพสกระทู้ ( 85 )
บทความ ( 0 )



สถานะออฟไลน์




ผมสร้าง dataset.xsd มา แล้วสร้าง datatable มาก็สามารถ ใช้งานได้ทุกอย่างครับ

แต่ถ้า สร้าง DataTable ที่ Join กัน 2 Table มันไม่เจน Insert,Update,Delete ให้
ทำให้เวลา Edit จาก GridView แล้วมัน Error

ผมต้องใช้วิธีไหน หรือทำอย่างไรหรอครับ
ถึงจะสามารถ Update ผ่าน GridView ที่ ใช้ DataTable ที่ Join กันได้ครับ



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2009-05-19 02:09:59 By : hassadin View : 3340 Reply : 17
 

 

No. 1



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


เราต้องสร้าง Store Insert,Update,Delete เองอ่าครับ แล้วก็ config TableAdapter Add Method แล้วเลือก Store พวกนี้ เพิ่มเข้าไป แล้วปกติผมจะสร้าง Class DataObject ครอบ Table Adapter อีกที่ ยกตัวอย่างเช่น
Class Diagram
=======================
MyTableAdapter
=======================
ColumA (PK)
ColumB
ColumC
=======================
Fill()
GetAll()
GetById(int Id)
Insert(ColumnA,ColumnB,ColumnC)
Update(ColumnA,ColumnB,ColumnC)
Delete(ColumnA,ColumnB,ColumnC)
=======================

Code
[System.ComponentModel.DataObject]
public class PuchaseDataObject
{
private MyTableAdapter m_Adapter;
public MyTableAdapter Adapter
{
get {
if (m_Adapter==null)
{
m_Adapter = new MyTableAdapter();
}
return m_Adapter;
}
}

public MyDataSet.MyTable GetAll()
{
return Adapter.GetAll();
}

public MyDataSet.MyRow GetById(int Id)
{
return Adapter.GetById(Id);
}

public void Insert(MyDataSet.MyRow row)
{
Adapter.Insert(row.ColumnA,row.ColumnB,row.ColumnC);
}

public void Update(MyDataSet.MyRow row)
{
Adapter.Update(row.ColumnA,row.ColumnB,row.ColumnC);
}

public void Delete(MyDataSet.MyRow row)
{
Adapter.Delete(row.ColumnA);
}
}







Date : 2009-05-19 10:23:48 By : jezusmitsui
 


 

No. 2



โพสกระทู้ ( 85 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ

อันนี้คือใช้ ClassDiagram เจน แล้วเขียน class PuchaseDataObject มาใช้อีกทีหรอครับ
ผมเคยใช้ ClassDiagram เจนแล้ว แต่ผมใช้งานผ่านพวก เมธอด Get Set ไม่ถูก แล้วผมใช้ ObjectDataSource แล้วมองไม่เห็นคลาสที่เจนมา
ผมใช้วิธีสร้างเมธอด เขียนติดต่อฐานข้อมูลเสร็จเก็บใส่ da ds

ผมเลยเปลี่ยนมาสร้าง dataset.xsd แทน เพราะมันติดต่อดาต้าเบส ให้เลย แล้วผมใช้ ObjectDataSource เห็น

1.ถ้าใ ช้ dataset.xsd สามารถทำได้ไหมครับ

2.ถ้าใช้ ClassDiagram พอจะมีตัวอย่าง ที่เขียนติดต่อดาต้าเบส แล้ววิธีเรียกใช้งานไหมคับ เพราะผมทำแล้ว ObjectDataSource มองไม่เห็นคลาส

ขอบคุณมากครับ
Date : 2009-05-19 13:21:08 By : hassadin
 

 

No. 3



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


ObjectDataSource มองไม่เห็น เพราะว่า Default มันจะดูว่า Class ไหนมี Attribute DataObject ระบุนะครับ
ถ้าไม่อยากใส่ Attribute มันจะมี option ที่ checkbox นะครับ ก็ uncheck/checked ดูครับ
หรือบ้างครั้งอาจจเป็นเพราะว่า เรายังไม่ได้ Build Project ก่อน ต้อง Build ก่อน แล้วค่อยใช้ ObjectDataSource หา DataObject อีกที

สังเกตุที Class PuchaseDataObject ผมใส่ Attribute DataObject ให้

นอกจากนี้ เราสามารถระบุ Method Type ให้กับ ObjectDataSource ได้ด้วย จะเห็นได้ว่าหลังจากเลือก ObjectDataSource จะมี Tab เลือก Method (Select,Update,Delete,Insert)

ซึ่งเราสามารถระบุ Attribute ให้ตัว ObjectDataSource รู้ Method Type ของ Class DataObject ที่เราเลือกไว้ได้
เช่น Select

Select Method Type
[System.ComponentModel.DataObjectMethodType(DataObjectMethodType.Select,true)]
public MyDataSet.MyTable GetAll()
{
return Adapter.GetAll();
}


Parameter ตัวแรกบอกว่า เป็น Method Type แบบ Select
Parameter ตัวสองบอกว่า เป็น Default หรือเปล่า ถ้าเป็น ที่ ComboBox Method ใน Select Tab จะเลือก Method นี้ให้

Insert Method Type
[System.ComponentModel.DataObjectMethodType(DataObjectMethodType.Insert,true)]
public MyDataSet.MyTable GetAll()
{
return Adapter.Insert();
}


ผมไม่ได้ใช้ Class Diagram Gen นะครับ ผมแค่ต้องการอธิบายว่า Class มี Property,Method อะไรบ้างเท่านั้นครับ

ถ้าเป็น Framework 2.0 ผมก็ใช้ DataSet นี้แหละ (ทั้งๆ ที่รู้ว่ามันไม่ค่อยดี) แล้วก็เขียน Class DataObject ครอบอีกที ที่ทำแบบนี้ เพราะว่า ผม Implement แบบ 3 Tier
DataAccess Layer-> MyTableAdapter
Bussiness Layer -> PurchaseDataObject
Date : 2009-05-19 13:58:15 By : jezusmitsui
 


 

No. 4



โพสกระทู้ ( 85 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
Date : 2009-05-19 19:29:10 By : hassadin
 


 

No. 5

Guest


ตรง [System.ComponentModel.DataObjectMethodType(DataObjectMethodType.Insert,true)]

ใช่ [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select,true)] หรือป่าวครับ
Date : 2009-05-20 00:06:33 By : hassadin
 


 

No. 6

Guest


อันนี้ดูเป็นตัวอย่างได้ครับ เผื่อคนที่ทำไม่เป็นเหมือนผมครับ
http://greatfriends.biz/webboards/msg.asp?id=98238
Date : 2009-05-20 00:47:44 By : hassadin
 


 

No. 7

Guest


ผมทำ แบบลิ้งค์ข้างบนอ่ะครับ ตารางเดียวใช้ได้ แต่ สองตาราง join กันไม่ได้เหมือนครับ - -

รูปภาพ

DetailRepair.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebApplication2.DataSet2TableAdapters;

namespace WebApplication2
{
    [System.ComponentModel.DataObject]
    public class DetailRepair
        {

        public DetailRepair()
        {

        }

        private DetailRepairTableAdapter _detailRepairAdapter;
        public DetailRepairTableAdapter Adapter
        {
            get
            {
                if (_detailRepairAdapter == null)
                {
                    _detailRepairAdapter = new DetailRepairTableAdapter();
                }
                return _detailRepairAdapter;
            }
        }

        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
        public DataSet2.DetailRepairDataTable GetAll(string Repair_id,int? listRepair_no)
        {
            return Adapter.GetDataDetailById(Repair_id,listRepair_no);
        }
        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
        public bool UpdateDetailRepair(string Repair_id,string listrepair_status,int? listRepair_no,string technician_name,string listRepair_date_start,string listRepair_date_end,string listRepair_about,string listRepair_comment)
        {
            DataSet2.DetailRepairDataTable dtReps = Adapter.GetDataDetailById(Repair_id,listRepair_no);

            if (dtReps.Count == 0)
            {
                return false;
            }
            DataSet2.DetailRepairRow rep = dtReps[0];
            if (listrepair_status == null)
            {
                rep.SetlistRepair_statusNull();
            }
            else
            {
                rep.listRepair_status = listrepair_status;
            }

            if (technician_name == null)
            {
                rep.Settechnician_nameNull();
            }
            else
            {
                rep.technician_name = technician_name ;
            }

            if (listRepair_date_start == null)
            {
                rep.SetlistRepair_date_startNull();
            }
            else
            {
                rep.listRepair_date_start = listRepair_date_start;
            }

            if (listRepair_date_end == null)
            {
                rep.SetlistRepair_date_endNull();
            }
            else
            {
                rep.listRepair_date_end = listRepair_date_end;
            }

            if (listRepair_about == null)
            {
                rep.SetlistRepair_aboutNull();
            }
            else
            {
                rep.listRepair_about = listRepair_about;
            }

            if (listRepair_comment == null)
            {
                rep.SetlistRepair_commentNull();
            }
            else
            {
                rep.listRepair_comment = listRepair_comment;
            }

            int rowsAffected = Adapter.Update(rep);
            return (rowsAffected==1);
        }
        public void Update(DataSet2.DetailRepairRow row)<<<<< อันนี้ผมลอง สร้าง method update ตามตัวอย่างพี่ครับ
        {
            Adapter.Update(row.listRepair_status, row.listRepair_date_start, row.listRepair_date_end,row.listRepair_about,row.listRepair_comment);
        }
    }
}


Test.aspx
<%
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataSourceID="ObjectDataSource1">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="Teacher_name" HeaderText="Teacher_name" 
                    SortExpression="Teacher_name" />
                <asp:BoundField DataField="Repair_date_start" HeaderText="Repair_date_start" 
                    SortExpression="Repair_date_start" />
                <asp:BoundField DataField="listRepair_no" HeaderText="listRepair_no" 
                    SortExpression="listRepair_no" />
                <asp:BoundField DataField="Computer_name" HeaderText="Computer_name" 
                    SortExpression="Computer_name" />
                <asp:BoundField DataField="listRepair_problem" HeaderText="listRepair_problem" 
                    SortExpression="listRepair_problem" />
                <asp:BoundField DataField="listRepair_room" HeaderText="listRepair_room" 
                    SortExpression="listRepair_room" />
                <asp:BoundField DataField="listRepair_status" HeaderText="listRepair_status" 
                    SortExpression="listRepair_status" />
                <asp:BoundField DataField="technician_name" HeaderText="technician_name" 
                    SortExpression="technician_name" />
                <asp:BoundField DataField="listRepair_id" HeaderText="listRepair_id" 
                    SortExpression="listRepair_id" />
                <asp:BoundField DataField="listRepair_date_start" 
                    HeaderText="listRepair_date_start" SortExpression="listRepair_date_start" />
                <asp:BoundField DataField="listRepair_date_end" 
                    HeaderText="listRepair_date_end" SortExpression="listRepair_date_end" />
                <asp:BoundField DataField="listRepair_about" HeaderText="listRepair_about" 
                    SortExpression="listRepair_about" />
                <asp:BoundField DataField="listRepair_comment" HeaderText="listRepair_comment" 
                    SortExpression="listRepair_comment" />
            </Columns>
        </asp:GridView>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
            OldValuesParameterFormatString="{0}" SelectMethod="GetAll" 
            TypeName="WebApplication2.DetailRepair" UpdateMethod="UpdateDetailRepair">
            <UpdateParameters>
                <asp:Parameter Name="listrepair_id" Type="String" />
                <asp:Parameter Name="listrepair_status" Type="String" />
                <asp:Parameter Name="listrepair_no" Type="Int32" />
                <asp:Parameter Name="technician_name" Type="String" />
                <asp:Parameter Name="listRepair_date_start" Type="String" />
                <asp:Parameter Name="listRepair_date_end" Type="String" />
                <asp:Parameter Name="listRepair_about" Type="String" />
                <asp:Parameter Name="listRepair_comment" Type="String" />
            </UpdateParameters>
            <SelectParameters>
                <asp:QueryStringParameter DefaultValue="Repair_id" Name="Repair_id" 
                    QueryStringField="Repair_id" Type="String" />
                <asp:QueryStringParameter DefaultValue="listRepair_no" Name="listRepair_no" 
                    QueryStringField="listRepair_no" Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>
%>


หลังจากที่ สร้าง เมธอด update มันให้คลิ๊ก เจอ เมธอด update ที่ไฟล์ DataSet2.Design.cs ครับ เลยคลิ๊กเจนไปครับ

รูปภาพ

พอใส่ข้อมูลแล้วกด Update ก็ Error แบบนี้ครับ

รูปภาพ

หาวิธี Update 2 table มาอาทิตย์กว่าแล้วครับ ทำไม่ได้สักที T-T
Date : 2009-05-20 02:16:02 By : hassadin
 


 

No. 8



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


คห 5: ใช่ครับ เผอิญผมพิมพ์สดนะครับ จำไม่ค่อยได้ ขออภัย

ขอตอบคำถาม: Error เกิดจากหา Method ที่ ObjectDataSource กะ Class ที่เรา map ไว้หาไม่เจอ จาก error จะสังเกตุได้ว่า Update ของเรารับ DataRow แต่ว่า มันมองหา Method Update ที่รับ Paramter 9 ตัว ก็เลยเกิด error ขึ้น

วิธีแก้คือ สร้าง Method Update รับ Paramter 9 ตัว
หรือต้องไปเล่น event Updating ของ ObjectDataSource เพื่อปรับค่า Paramter 9 ตัว -> 1 ตัว

Insert (เล่น Event Inserting)
MyObjectDataSource_Updating(object sender,ObjectDataSourceMethodEventArgs e)
{
DataSet2.DetailRepairRow row = DataSet2.DetailRepair.NewDetailRepairRow(); <== มันจำว่ามันมี New ที่ Return Type: DataSet2.DetailRepairRow เลย (ที่ได้จากการ Gen) กลัวพิมพ์ผิด
row.listrepair_id= e.InputParameters["listrepair_id"];
row.listrepair_status= e.InputParameters["listrepair_status"];
row.listrepair_no= e.InputParameters["listrepair_no"];
row.listRepair_date_start = e.InputParamters["listRepair_date_start "];
row.listRepair_date_end = e.InputParamters["listRepair_date_end"];
row.listRepair_about = e.InputParamters["listRepair_about"];
row.listRepair_comment = e.InputParamters["listRepair_comment"];

e.InputParameters["row"] = row;
e.InputParameters.Remove["listrepair_id"];
e.InputParameters.Remove["listrepair_status"];
......
e.InputParameters.Remove["listRepair_comment"];
}


ถ้าไม่ลบ Paramter ออก มันจะมองหา Method Update(listrepair_id,listrepair_status,...,listRepair_comment,row) ดังนั้งเราต้องลบ Parameter ออก ให้เหลือแต่ row เพือ map กับ Method Update(row)

*** และต้องแน่ใจว่า DataObjectTypeName เป็นค่าว่างๆๆ
Date : 2009-05-20 10:43:46 By : jezusmitsui
 


 

No. 9



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


เจี๊ยก คห ที่ 8 ที่หัว Code ผมพิมพ์ผิด T-T ต้องเป้น Update(เล่น Event Updating)
Date : 2009-05-20 11:00:31 By : jezusmitsui
 


 

No. 10

Guest


รบกวนช่วยต่ออีกนิดนะครับ ยังทำไม่ได้เลย ติดปัญหาเรื่องนี้มานานแล้วครับ

Code Behind
public void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            DataSet2.DetailRepairRow row = DataSet2.DetailRepairRow.NewDetailRepairRow(); 
            //row.listRepair_id = e.InputParameters["listRepair_id"].ToString();
            row.listRepair_status = e.InputParameters["listRepair_status"].ToString();
            //row.listRepair_no = Convert.ToInt16(e.InputParameters["listRepair_no"]);
            row.technician_name = e.InputParameters["technician_name"].ToString();
            row.listRepair_date_start = e.InputParameters["listRepair_date_start"].ToString();
            row.listRepair_date_end = e.InputParameters["listRepair_date_end"].ToString();
            row.listRepair_about = e.InputParameters["listRepair_about"].ToString();
            row.listRepair_comment = e.InputParameters["listRepair_comment"].ToString();

            e.InputParameters["row"] = row;

            //e.InputParameters.Remove["listRepair_id"];
           //e.InputParameters.Remove["listRepair_status"];
           //e.InputParameters.Remove["listRepair_no"];
}


1. ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)ใส่ไว้ใน Code Behind .aspx.cs ใช่ไหมครับ
2. แล้ว e.Input เฉพาะฟิวที่เราต้องการอัพเดท หรือป่าวครับ หรือว่าหมดเลย
3. ผมใส่ e.InputParemeters.Remove ไม่ได้ครับ


4. แล้ว ที่ ไฟล์ DetailRepair.cs ใช้ method update อันนี้ใช่ไหมครับ

DetailRepair.cs
public void Update(DataSet2.DetailRepairRow row)
        {
            Adapter.Update(row.listRepair_status,row.technician_name, row.listRepair_date_start, row.listRepair_date_end,row.listRepair_about,row.listRepair_comment);
        }


5. แล้ว ที่ ไฟล์ .aspx ตรง ObjectDataSource ต้องใส่ OnUpdated หรือ OnUpdating ด้วยหรือป่าวครับ

ไม่ทราบว่าผมเข้าใจถูกหรือป่าว
แต่ผมลองทำแล้ว Error แบบนี้อ่ะครับ

No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.


ขอบคุณมากครับ
Date : 2009-05-20 23:53:57 By : hassadin
 


 

No. 11



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
1. ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)ใส่ไว้ใน Code Behind .aspx.cs ใช่ไหมครับ

ใช่ครับ

Quote:
2. แล้ว e.Input เฉพาะฟิวที่เราต้องการอัพเดท หรือป่าวครับ หรือว่าหมดเลย

หลักการคือ จำนวน Key ใน e.InputParamters ต้องเท่ากับ จำนวน paramter ที่เรา map กับ Method นั้นไว้
เช่น เรามี Method: Update(string employeeId,string name,string lastname)
ใน e.InputParameters ก็ต้องมี key
employeeId
name
lastame

ุ้ถ้ามีเกินหรือขาด มันก็จะ error ว่า หา method นั้นไม่เจอ แต่ใน case นี้ มีจำนวน Key ใน e.InputParamters มากกว่า parameter ของ method ดังนั้น ผมก็เราให้ทำการ customize ค่า key ให้ map กับ method Update(DataRow row) ครับ

Quote:
3. ผมใส่ e.InputParemeters.Remove ไม่ได้ครับ

e.InputParameters.Remove["listRepair_id"];
e.InputParameters.Remove["listRepair_status"];
e.InputParameters.Remove["listRepair_no"];

ต้องขออภัย มันเป็น method ครับ (ตอน Preview ไม่ได้สังเกตุ)

e.InputParameters.Remove("listRepair_id");
e.InputParameters.Remove("listRepair_status");
e.InputParameters.Remove("listRepair_no");

Quote:
No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.


ถ้าเกิด error ตัวนี้ แปลว่าค่า Property DataObjectTypeName ของ ObjectDataSource มีค่า ให้แก้ให้เป็นค่าว่างๆๆ
สาเหตุเพราะว่า DataRow ไม่มี Parameterless Constructor

Code
DataRow row = new DataRow() <== สังเหตุว่าเวลาที่เราสร้าง instance DataRow จะทำแบบนี้ไม่ได้

เวลาสร้าง Row เราต้องทำแบบนี้
DataRow row = MyTableInstance.NewRow();
หรือ
DataRow row = MyTableInstance.AddMyRow(a,b,c);

Date : 2009-05-21 09:20:09 By : jezusmitsui
 


 

No. 12

Guest


รบกวน ผมทวนอีกทีและกันนะครับไม่แน่ใจว่าผมทำอะไรผิดถึงไม่ได้สักที
อันนี้ผม สร้างโปรเจ็คใหม่เลยนะครับ

ย้อนกลับไปดู No.8 ตรง DataSet2.DetailRepairRow row = DataSet2.DetailRepair.NewDetailRepairRow();
หรือว่า DetailRepairRow ครับ ผมเห็นมันไม่มีให้เลือกผมใส่ DetailRepairRow ไปนะครับ
แต่ว่า มันไม่มี .NewDetailRepairRow(); ให้เลือก ผมเลยใส่ไปเอง แล้วมันมีให้คลิ๊ก เลือก Gen อ่ะครับ (ถ้าไม่เจน มันก็ Error แดง)
ดังรูปนะครับ
gen

จาก No.11
DataRow row = MyTableInstance.NewRow();
หรือ
DataRow row = MyTableInstance.AddMyRow(a,b,c);

หมายความว่า เปลี่ยนตรง DataSet2.DetailRepairRow row = DataSet2.DetailRepairRow.NewDetailRepairRow();
เป็น DataRow row = MyTableInstance
MyTableInstance ใช่ DataSet2.DetailRepairRow หรือ DataSet2.DetailRepairTable หรือป่าวครับ
แต่มันไม่มี .NewRow() หรือ .AddMyRow() ให้เลือกครับ

แล้วที่ไฟล์ DetailRepair.cs

เมธอด Update ที่สร้างขึ้นมา
ตรง Adapter.Update ขึ้น Error สีแดง มีให้คลิ๊ก gen ผมก็เลยคลิกเจนไปครับ
ดังรูป
genupdate

ที่ .aspx
ตรง ObjectDataSource ผมแก้ DataObjectTypeName="" แ ละ OldValuesParameterFormatString="{0}" แล้วครับ

ทดสอบแล้ว update Error ดังรูป
err

ผมไม่รู้ว่า ผมทำผิดขึ้นตอนหรือเข้าใจผิดอะไรหรือป่าวครับ
ทำไม่ได้สักที
Date : 2009-05-21 17:21:34 By : hassadin
 


 

No. 13



โพสกระทู้ ( 85 )
บทความ ( 0 )



สถานะออฟไลน์


ต้องรบกวนพี่อีกแล้ว ขอบคุณพี่มากนะครับ
โปรเจ็คผมไปไม่ถึงไหนติดอยู่ตรง Update นี่นานมากแล้วครับ
Date : 2009-05-21 17:24:39 By : hassadin
 


 

No. 14



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


สำหรับวิธีแก้ พี่มีให้เลือก 2 วิธี คือ
1) สร้าง method update เพิ่ม โดยรับ parameter ให้เหมือนกับ DetailRepairTableAdapter ที่ได้จากการ gen ของ IDE ดูจาก error เหมอืนจะรับ 12 ตัว (ชื่อ paramter ไม่ต้องเหมือนก็ได้ ขอให้ Signature มันเหมือนกัน) จากนั้นก็ config ObjectDataSource ให้เลือก method update ตัวใหม่ที่เราเพิ่ม

2) สำหรับวิธีที่ 2 พี่ได้บอกไปแล้ว ว่า (ย้ำอีกที่) มันเกิดจาก มันหา method update ที่รับ paramter 12 ตัว ไม่เจอ (12 ตัว พี่นับภาพ error ที่น้องแสดง) ถ้ามองให้เห็นภาพ คือ DetailRepairDataObject <== Class ที่สร้างเราสร้างครอบ TableAdapter (หรือ Class ที่เราเลือกใน ObjectDataSource) มันไม่มี method Update ที่รับ paramter 12 ตัว มีแต่ method Update รับ paramter ตัวเดียวคือ dataRow ของ DetailRepairRow

พี่ก็เลยบอกว่า ให้เราไป Customize Update Paramter ก่อน ที่ ObjectDataSource จะส่งให้กับ Class ที่ map ไว้ ใน Event Updating ถ้าพี่ดูจาก error น่าจะแก้เป็บแบบนี้

แก้จาก คห 10
Code
public void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
DataSet2.DetailRepairRow row = DataSet2.DetailRepairRow.NewDetailRepairRow();
row.technician_name = e.InputParameters["technician_name"].ToString();
row.listRepair_status = e.InputParameters["listRepair_status"].ToString();
row.listRepair_date_start = e.InputParameters["listRepair_date_start"].ToString();
row.listRepair_date_end = e.InputParameters["listRepair_date_end"].ToString();
row.listRepair_about = e.InputParameters["listRepair_about"].ToString();
row.listRepair_comment = e.InputParameters["listRepair_comment"].ToString();
e.InputParameters["row"] = row;

// ลบ Paramter ทุกตัว ยกเว้น Key ที่ชื่อว่า row
e.InputParameters.Remove("technician_name");
e.InputParameters.Remove("listRepair_status");
e.InputParameters.Remove("listRepair_date_start");
e.InputParameters.Remove("listRepair_date_end");
e.InputParameters.Remove("listRepair_date_about");
e.InputParameters.Remove("listRepair_comment");
......
}

** ลอง Debug line สุดท้าย ของ method ObjectDataSource1_Updating นี้ดูว่า ค่า key ใน e.inputParamters มี key อะไรบ้าง ถ้าเหลือแต่ key "row" ก็ ok ถ้ามีเกินต้อง remove ออกให้หมด... ย้ำออกให้หมด ไม่งั้นมันก็ error ดังภาพให้น้องให้มา

จาก Code ข้างต้น ทำการ Customize Update Paramter จาก
ฺBefore
==========================
technician_name
listRepair_status
listRepair_date_start
listRepair_date_end
listRepair_date_about
listRepair_comment
.......
===========================

After
==========================
row
===========================

ถ้าไม่ได้อีก ส่ง Code มาที่ [email protected] เดี๋ยวจะแก้ให้ ขอเป็นทั้ง Project นะครับ
Date : 2009-05-21 18:17:09 By : jezusmitsui
 


 

No. 15



โพสกระทู้ ( 85 )
บทความ ( 0 )



สถานะออฟไลน์


ที่ ObjectDataSource ผมเพิ่ม OnUpdating="ObjectDataSource1_Updating" เข้าไปคิดว่าน่าจะใช่
แล้วก็ Error แบบนี้ครับ

The method or operation is not implemented.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NotImplementedException: The method or operation is not implemented.



Line 948: internal static DetailRepairRow NewDetailRepairRow()
Line 949: {
Line 950: throw new System.NotImplementedException();
Line 951: }
Line 952: }



ผมลองสร้าง method รับพารามิเตอร์ 12 ตัว ด้วยครับ ลองแล้ว Error เดียวกันครับ
Date : 2009-05-21 21:59:43 By : hassadin
 


 

No. 16



โพสกระทู้ ( 371 )
บทความ ( 0 )



สถานะออฟไลน์


แก้ Code และส่งไปให้แล้วนะครับ
Date : 2009-05-22 11:02:23 By : jezusmitsui
 


 

No. 17

Guest


ขอบคุณครับ
Date : 2009-05-23 00:00:23 By : hassadin
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : TableAdapter Join table ไม่สามารถ Update ได้ ต้องทำอย่างไรหรอครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่