نمایش نتایج 1 تا 8 از 8

نام تاپیک: آپدیت خانه های تغییرکرده در دیتاگرید

  1. #1

    آپدیت خانه های تغییرکرده در دیتاگرید

    سلام به همه دوستان
    فرض کنید که یک دیتا گرید ویو و دو button داریم.
    بعد فشردن اولین button اطلاعات خاصی به دیتاگرید ویو،لود میشه و خونه های اونو پر میکنه.
    حالا ما ویرایش خونه های دیتاگرید ویو رو مجاز قرار دادیم.
    حالا سوال من اینه که چجوری بعد اینکه کاربر بعضی خونه ها رو ویرایش کرد و button دوم رو زد،فقط همون خونه ها آپدیت بشن؟
    از event خاصی باید استفاده بشه؟ یا کار دیگه ای؟
    اگه دوستان راهنماییم کنن و احیانا کد خاصی رو نشون بدن،خیلی ممنون میشم

  2. #2

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    نقل قول نوشته شده توسط saeidmscs مشاهده تاپیک
    سلام به همه دوستان
    فرض کنید که یک دیتا گرید ویو و دو button داریم.
    بعد فشردن اولین button اطلاعات خاصی به دیتاگرید ویو،لود میشه و خونه های اونو پر میکنه.
    حالا ما ویرایش خونه های دیتاگرید ویو رو مجاز قرار دادیم.
    حالا سوال من اینه که چجوری بعد اینکه کاربر بعضی خونه ها رو ویرایش کرد و button دوم رو زد،فقط همون خونه ها آپدیت بشن؟
    از event خاصی باید استفاده بشه؟ یا کار دیگه ای؟
    اگه دوستان راهنماییم کنن و احیانا کد خاصی رو نشون بدن،خیلی ممنون میشم
    یک زمان این موضوع ساده سوال من هم بود ... و به کمک دوستان سایت برنامه نویس حل شد ... شما باید از کد زیر برای این منظور استفاده کنی :


    SqlCommandBuilder scb = new SqlCommandBuilder(da);
    da.Update(ds.Tables[0]);

  3. #3

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    نقل قول نوشته شده توسط ostovarit مشاهده تاپیک
    یک زمان این موضوع ساده سوال من هم بود ... و به کمک دوستان سایت برنامه نویس حل شد ... شما باید از کد زیر برای این منظور استفاده کنی :


    SqlCommandBuilder scb = new SqlCommandBuilder(da);
    da.Update(ds.Tables[0]);
    ممنون
    اما عزیزم اینقدرها هم ساده نیست.
    توجه کن،در ابتدا خونه های جدول پر میشه و بعد قراره کاربر اونارو پر کنه
    اگر یه جدول خالی جلومون بود،صحبت شما کاملا صحیح بود اما اینجا اینجوری نیست و این دستورات جدولو آپ دیت نمیکنه

  4. #4

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید



    DataSet TempDataSet = new DataSet();
    if ( myDataSet.HasChanges() )
    {
    this.BindingContext[ myDataSet , "Employees" ].EndCurrentEdit(); //supress it
    TempDataSet = myDataSet.GetChanges();
    foreach ( DataRow dr in TempDataSet.Tables[ 0 ].Rows ) //validate all new/changed rows step-by-step
    if ( dr.RowState != DataRowState.Deleted ) //deleted row has nothing to check!
    {
    if ( dr[ "Title" ].ToString().Trim() == String.Empty )
    {
    MessageBox.Show( "ستون عنوان خالی است" );
    dr[ "title" ] = "مقداری وارد نشده است";
    // dr.RejectChanges(); // Reject only an unwanted row !
    }
    }
    myDataAdapter.Update( TempDataSet.Tables[ 0 ] ); //save changes made to DataSet
    myDataSet.AcceptChanges(); // commit changes

  5. #5

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    نمیشه!نمیشه!نمیشه! به خدا آپدیت نمیشه!
    نمیدونم چرا فقط اینو میدونم که وقتی اطلاعات موجود در دیتابیس رو تو دیتاگرید،لود نمیکنم و دیتا گرید خالیه و بعدش چیزی رو اضافه میکنم،اینا به دیتا بیس اضافه میشن.
    اما این به کارم نمیاد
    کاربر باید یه جدولی رو ببینه که قبلا اونو پر کرده و الان میخواد ویرایش کنه.
    لطفا کمکم کنید
    چند روزه که دارم رو این کار میکنم

  6. #6

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    درست و حسابی توضیح بده ببینم چی می خوای. اونقدر پر و خالی کردی نفهمیدم چی میخوای !

  7. #7

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    نقل قول نوشته شده توسط Afshin_Zavar مشاهده تاپیک
    درست و حسابی توضیح بده ببینم چی می خوای. اونقدر پر و خالی کردی نفهمیدم چی میخوای !
    یه دیتاگرید ویو داریم و دو تا button.
    بعد اینکه کاربر اولین button رو زد،اطلاعات خاصی وارد دیتا گرید شده و نمایش داده میشه.
    حالا کاربر میتونه یه خونه خاصی رو ویرایش کنه،یا یه ردیف رو حذف کنه یا هرکار دیگه و بعد اینکه button دوم رو زد،همه تغییرات ذخیره شن.
    اما چجوری؟؟

  8. #8

    نقل قول: آپدیت خانه های تغییرکرده در دیتاگرید

    خوب پسر خوب
    TempDataSet = myDataSet.GetChanges();
    واسه همینه دیگه. شما دیتاست رو به گرید پاس میدی و بعد با

    myDataSet.HasChanges()

    می فهمی که تغییرات داشتی یا نه بعد با GetChange تغییرات رو میخونی و داخل TempDataSet میریزی.

    حالا با یه حلقه میتونی سطرهای TempDataSet رو مرور کنی. و بفهمی کدوم سطر حذف شده و کدوم سطر ویرایش شده
    dr.RowState != DataRowState.Deleted


    توضیحی که مایکروسافت داده اینه:
    Creates a new DataSet that contains a copy of all rows in the original DataSet that have pending changes. Relationship constraints can cause additional unchanged rows to be added to the new DataSet if the unchanged rows contain primary keys corresponding to foreign keys in the changed rows. The method returns null if there are no rows in the original DataSet that have pending changes.
    و نمونه پروژه هم اینه

    private void DemonstrateMerge()
    {
    // Create a DataSet with one table, two columns,
    // and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
    Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
    Type.GetType("System.Int32"),"");

    // DataColumn array to set primary key.
    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;

    // Create variable for temporary DataSet.
    DataSet changesDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+=new DataRowChangeEventHandler(
    Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;
    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
    row=table.NewRow();
    row["Item"]= i;
    table.Rows.Add(row);
    }
    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");

    // If the table has changes or errors,
    // create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
    DataRowState.Added)&& dataSet.HasErrors)
    {
    // Use GetChanges to extract subset.
    changesDataSet = dataSet.GetChanges(
    DataRowState.Modified|DataRowState.Added);
    PrintValues(changesDataSet, "Subset values");

    // Insert code to reconcile errors. In this case, reject changes.
    foreach(DataTable changesTable in changesDataSet.Tables)
    {
    if (changesTable.HasErrors)
    {
    foreach(DataRow changesRow in changesTable.Rows)
    {
    //Console.WriteLine(changesRow["Item"]);
    if((int)changesRow["Item",DataRowVersion.Current ]> 100)
    {
    changesRow.RejectChanges();
    changesRow.ClearErrors();
    }
    }
    }
    }
    // Add a column to the changesDataSet.
    changesDataSet.Tables["Items"].Columns.Add(
    new DataColumn("newColumn"));
    PrintValues(changesDataSet, "Reconciled subset values");
    // Merge changes back to first DataSet.
    dataSet.Merge(changesDataSet, false,
    System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
    }

    private void Row_Changed(object sender, DataRowChangeEventArgs e)
    {
    Console.WriteLine("Row Changed " + e.Action.ToString()
    + "\table" + e.Row.ItemArray[0]);
    }

    private void PrintValues(DataSet dataSet, string label)
    {
    Console.WriteLine(label + "\n");
    foreach(DataTable table in dataSet.Tables)
    {
    Console.WriteLine("TableName: " + table.TableName);
    foreach(DataRow row in table.Rows)
    {
    foreach(DataColumn column in table.Columns)
    {
    Console.Write("\table " + row[column] );
    }
    Console.WriteLine();
    }
    }
    }


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •