الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعده لو سمحتم ضرووووووري

مغلق
بدأه nanoosa في 9 مايو 2004 · 2 رد · 624 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انا طالبه اقوم بعمل بحث على الvisual studio و عندي مشكله اني

عندي داتاغريد datagrid فيها 4 أعمده واحد فيهم templatecolumn ونوعه textbox

المهم

ما أعرف كيف اذا المستخدم حدًث محتويات الtextbox

كيف ممكن اخذ المحتوى اللي ادخله المستخدم و ارسله ليحدٍث الdatabase

so i need to update the database through a datagrig textbox

لو سمحتوا اليي يعرف يكتبلي بالتفصيل لانه انا لسه مبتدئه

وشكرا

#2

السلام عليكم الأمر سهل جداَ..

الصراحة ماكنش في داعي لل TemplateColumn فاال DataGrid توفر طرق لعملية ال Update الى داخل ال Database سأعرض لك طريقتين من هذه الطرق..:

الطريقه الأولى:

ساأقوم برسم ال DataGrid ومحتوياتها عن طريق هذا الكود:

<asp:datagrid id="DataGrid1" runat="server" DataKeyField="CustomerID" AutoGenerateColumns="False">
     	 <Columns>
        <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" HeaderText="Update" CancelText="Cancel"
       	 EditText="Edit"></asp:EditCommandColumn>
        <asp:BoundColumn DataField="CustomerID" ReadOnly="True" HeaderText="Customer Id"></asp:BoundColumn>
        <asp:BoundColumn DataField="CompanyName" HeaderText="Company Name"></asp:BoundColumn>
        <asp:BoundColumn DataField="ContactName" HeaderText="Contact Name"></asp:BoundColumn>
</Columns>
      </asp:datagrid>

لاحظ عملت فقط ثلا ث حقول...المهم اني هنا استخدمت طريقة Button Column التي فيها Update Button و Edit Button و Cancel Button ..فلكل نوع من هذه الأنواع Event معين..(سوف استخدم هذا ال Events في Codebehind ) وليس عن طريق ال Script اي VC# Script ..إذهب الى ال Events الموجوده لل DataGrid سنستخدم ال Events التاليه:

1- CancelCommand

2- EditCommand

4- UpdateCommand

بعد عملية الإختيار لهذه ال Events قم بكتابة الكود التالي في Codebehind ..:

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
 	 DataGrid1.EditItemIndex=(int)e.Item.ItemIndex;//يجعل الصف قابل للتعديل وبشكل تلقائي يختفي الزر ويضهر الزران ابديت و كانسل 
 	 BindData();	// عباره عن داله تقوم بعملية بايندينك للداتا الى داخل الداتا جريد اي عملية تحديث وتغيير للشكل..    
  }

  private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
 	 DataGrid1.EditItemIndex=-1;//يعيد شكل الدات جريد الى ما كان سابقاً ف -1 يعني مافي اي تعديل
 	 this.Panel1.Visible=false;//هذي ال بانل سأستخدمها لاحقاً في الطرسقة الثانيه..
 	 BindData();//وأكيد عملية تحديث للداتا جريد وتغيير شكلها..
  }

  private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
 	 string CustomerId=e.Item.Cells[1].Text;//وهو رقم الزبون id  يحتوي على الصف لذي ستقوم بعمل له تحديث حسب ال  e الكائن 
 	 string CompanyName=((TextBox) e.Item.Cells[2].Controls[0]).Text;// يبدأ من الزيرو TableCell دائما  
 	 string ContactName=((TextBox) e.Item.Cells[3].Controls[0]).Text;
 	 
 	 con=new SqlConnection(strcon);//make connection
 	 cmd=new SqlCommand("Update Customers set CompanyName='"+CompanyName+"',ContactName='"+ContactName+"' where CustomerID='"+CustomerId+"'",con);
 	 con.Open();
 	 cmd.ExecuteNonQuery();
 	 con.Close();
 	 DataGrid1.EditItemIndex=-1;//return it back to original datagrid..
 	 this.BindData();//then binding the data to datagrid..
  }

اما بالنسبه ل الداله BindData فهي كالتالي:

private void BindData()
  {
 	 con=new SqlConnection(strcon);
 	 cmd=new SqlCommand("select CustomerID,CompanyName,ContactName from Customers",con);
 	 con.Open();
 	 dr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
 	 DataGrid1.DataSource=dr;
 	 DataGrid1.DataBind();
 	 con.Close();
  }

الطريقة الثانيه :

بأن تقوم باضافة وحذف بعض الأشياء من الداتا جريد، وإضافة بعض ال Controls ..:

حذف الأشياء من الطريقة السابقة:

<asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" HeaderText="Update" CancelText="Cancel"
       	 EditText="Edit"></asp:EditCommandColumn>

ونحط بدله هذا :

<asp:ButtonColumn CommandName="Select" ButtonType="PushButton" Text="Edit" />

أما بالنسبه لل Control الأخرى فهي كلها داخل ال panel ..:

<asp:panel id="Panel1" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 272px" runat="server"
    Visible="False" Height="112px" Width="480px">
    <TABLE id="Table2" cellSpacing="1" cellPadding="1" width="100%" border="1">
   	 <TR>
      <TD width="25%">Customer Id:</TD>
      <TD width="25%">
     	 <asp:TextBox id="txtCustomerId" runat="server"></asp:TextBox></TD>
      <TD></TD>
   	 </TR>
   	 <TR>
      <TD>Name</TD>
      <TD>
     	 <asp:TextBox id="txtName" runat="server"></asp:TextBox></TD>
      <TD></TD>
   	 </TR>
   	 <TR>
      <TD>Contact:</TD>
      <TD>
     	 <asp:TextBox id="txtContact" runat="server"></asp:TextBox></TD>
      <TD></TD>
   	 </TR>
   	 <TR>
      <TD></TD>
      <TD align="center">
     	 <asp:Button id="Button2" runat="server" Text="Save"></asp:Button></TD>
      <TD></TD>
   	 </TR>
    </TABLE>
 	 </asp:panel>

وهنا سنستخدم فقط Event واحده الا وهي/

1-ItemCommand ..

الكود تبعه:

private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
 	 
 	 Button btn=(Button)e.CommandSource;//نأخذ مرجع للزر المضغوط
 	 if(btn.Text=="Edit")
 	 {
    //fill the control with data from datagrid..
    this.txtCustomerId.Text=e.Item.Cells[1].Text;
    this.txtName.Text=e.Item.Cells[2].Text;
    this.txtContact.Text=e.Item.Cells[3].Text;
    this.BindData();//make refresh to datagrid
    this.Panel1.Visible=true;//show the panel that it hiden..
 	 }
 	 
  }

اما بالنسبه للزر Save فاكود تبعه :

private void Button2_Click(object sender, System.EventArgs e)
  {
 	 String customerId=this.txtCustomerId.Text;
 	 String name=this.txtName.Text;
 	 String contact=this.txtContact.Text;
con=new SqlConnection(strcon);
    cmd=new SqlCommand("Update Customers Set CustomerID='"+customerId+"',CompanyName='"+name+"',ContactName='"+contact+"'",con);
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    DataGrid1.EditItemIndex=-1;
    this.Panel1.Visible=false;
    this.BindData();
 	 }

المنغير strcon عباره عن:

server=localhost;database=mydatabse;uid=sa;password;

اتمنى ان يكون الشرح واضح

بالتوفيق إن شاء الله..

بسام باصمد

techvisio.gif

اللهم انصر إخواننا المجاهدين في كل مكان..

#3

جزاك الله خير شكرا

بصراحه الشرح وافي جدا

شكرا جزيلا لك

:)

هذا الموضوع مغلق.

مواضيع مشابهة