שלח תשובה

זירת השאלות

693
צפיות
3
תשובות

עדכון נתונים- dg1UpdateCommand-בעיה

,‏ 13 באוגוסט, 2006

הינה הקוד הבעייתי:



<%@ Import Namespace =system %>
<%@ Import Namespace =system.data %>
<%@ Import Namespace =system.data.oledb %>
<script runat =server >
Sub  page_load(ByVal obj As Object, ByVal e As EventArgs)
    Dim conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("ithabrut.mdb"))
    Dim cmd As New OleDbDataAdapter("Select * from users", conn)
    Dim ds1 As DataSet = New DataSet()
    cmd.Fill(ds1, "users")

    dg1.DataSource = ds1
    DataBind()
End Sub

Sub dg1EditCommand(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
    dg1.EditItemIndex = e.Item.ItemIndex
    dg1.DataBind()
End Sub
Sub dg1UpdateCommand(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
    Response.Write("updated")
    Dim newUsername, newPassword As String
    newUsername = CType(e.Item.Cells(1).Controls(0), TextBox).Text
    newPassword = CType(e.Item.Cells(2).Controls(0), TextBox).Text
    dg1.DataBind()
End Sub
Sub dg1CancelCommand(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
    dg1.EditItemIndex = -1
    dg1.DataBind()
End Sub
</script>
<html >
<body dir =rtl>
    <form runat =server >
    <asp:DataGrid ID=dg1 runat =server AutoGenerateColumns =false CellPadding =5
    OnEditCommand =dg1EditCommand
    OnCancelCommand =dg1CancelCommand
    OnUpdateCommand =dg1UpdateCommand>

    <Columns >

    <asp:BoundColumn HeaderText ="שם משתמש" DataField ="username"></asp:BoundColumn>
         <asp:BoundColumn HeaderText ="סיסמא" DataField ="password"></asp:BoundColumn>
    <asp:EditCommandColumn EditText ="ערוך" UpdateText ="שנה" CancelText ="חזור" Headertext="עריכה"></asp:EditCommandColumn>
    </Columns>
    </asp:DataGrid>
    </form>
</body>
</html>



זאת כנראה בשל חוסר פקודה מתאימה(שהפונקציה dg1UpdateCommand תבצא פניה לDETASET או תפנה ישירות למסד נתונים.

אודה מאוד על עזרתכם.

בתודה מראש.

איתמר.

תגיות:

3 תשובות

  1. aviadfe הגיב:

    יש לך כמה בעיות בקוד
    ידידי היקר.

    מפליא אותי שאינך מקבל את מיקומה המדוייק של השגיאה הקריטית.

    אחד היתרונות של NET., היכולת לדייק בשגיאה, היות ויש מהדר שעובר עליה ובודק שורה אחרי שורה.

    הבעיות שלך הן כמה:
    1. טבלת DataGrid לעולם לא יכולה להתחבר במאפיין DataSource שלה לאובייקט DataSet, כי DataSet מכיל הרבה טבלאות וגם אלמנטים כמו קשרי גומלין, שהם אינם טבלאות.

    אתה צריך שהDשאשSםורבק שלך יוגדר אל DataTable מסויים מתוך DataSet.

    כך:

    dg1.DataSource = ds1.Tables("users")

    כך יצרת קריאה לDataTable – פשוטה, מבלי לקרוא לאובייקט DataTable.

    2. שגיאות מבניות של ASP.NET:
    יש שני דברים שאתה חייב לעשות:
    א. תגית FORM חייבת לקבל ID מזהה ייחודי. אחרת, שגיאת קומפליקציה של ASP.NET.

    ב. השם ID, המאפיין RUNAT=SERVER, כל אלו חייבים להיות בתוך מרכאות, ובכלל בתכנות ב- ASP..NET, רצוי לשים מרכאות לכל המאפיינים – זה חוק XHTML.

    בנוסף לבעיות הללו, כמה המלצות:
    1. אתה משתמש בNET. 1.1 – מדוע? גירסה 2 מאפשרת לך לוותר על ביצוע IMPORT בכל דף ודף, מייצרת לך DATASETS אוטומטיים בקובץ גלובאלי נפרד, ועוד… כמו כן, פקד DATAGRID הוא מאוד פרימיטיבי לעומת פקד GRIDVIEW שמסוגל לבצע מיונים אוטומטיים, מסננים, עדכונים וכד' באוטומציה מוחלטת, וכן מאפשר גמישות גבוהה יותר בתכנות.

    2. ASP.NET מסוגלת לנהל שני קבצים מקושרים על גבי השרת. קובץ VB נפרד מקובץ ASPX. במקום להשתמש בקוד בתוך script runat="server", דבר המחייב אותך להמנע משימוש בריבוי מחלקות ובחלק ניכר מיתרונות הורשה וניהול אירועים, נצל את הפרדת הקבצים לשניים. כתוב את קובץ VB בקובץ נפרד. זכור גם, שאחת השגיאות הנפוצות של מתכנתי WEB ב- ASP.NET, שעובדים בשיטת הקוד שלך, שכשהם מוחקים אירוע קורות שגיאות בגלל ששכחו למחוק את הקריאה לאירוע בפקדים.

    תכנות בשני קבצים מונע את הצורך בקריאה לאירועים מתוך הפקד, ומסתפק בקריאה רגילה של תוכנה לאירוע, על ידי מטפל אירוע.

    בברכה
    אביעד

  2. marglf הגיב:

    תודה רבה!
    תודה רבה לך אביעד!

    אני אקח את האמור לצומת לבי.

    בברכה,
    איתמר

  3. aviadfe הגיב:

    אתה מוזמן לפנות אלי באי-מייל…
    [email protected]

    פנה אלי באי-מייל ואעזור לך לעשות מעבר ל- NET 2.

שלח תשובה