PDA

View Full Version : مشکلات مهاجرت به کدنویسی



merlin_vista
یک شنبه 29 مهر 1386, 15:43 عصر
آقا من تازه از روش Wizard به کد نویسی مهاجرت کردم و حالا نمیدانم که چگونه برای GridView دکمه Edit بنویسم : من از این روش استفاده کردم ولی خوشم نیامد چون تتمام چیز ها را در ASP باید بنویسم و میخواهم کد ها را در C# بنویستم
ان هم روش من :

<asp:SqlDataSource ID="linkdo" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="Data Source=(local);Initial Catalog=asannet;Persist Security Info=True;User ID=asannet;Password=5236651" SelectCommand="select * from LinkDostan" SelectCommandType="Text" UpdateCommand="UPDATE LinkDostan SET Name = @Name,link= @link, toltip = @toltip WHERE id = @id" UpdateCommandType="Text" DeleteCommand="DELETE FROM LinkDostan WHERE id = @id" DeleteCommandType="Text" >
<UpdateParameters>
<asp:Parameter Type="String" Name="Name" />
<asp:Parameter Name="link" Type="String" />
<asp:Parameter Type="String" Name="toltip" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Type="String" Name="Name" />
<asp:Parameter Name="link" Type="String" />
<asp:Parameter Type="String" Name="toltip" />
</DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" DataSourceID="linkdo" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id" CssClass="fon">
<Columns>
<asp:TemplateField HeaderText="لینک دوستان">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" CssClass="fon" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "link") %>' Target="_blank" ToolTip='<%# DataBinder.Eval(Container.DataItem, "toltip") %>'><%# DataBinder.Eval(Container.DataItem, "Name") %></asp:HyperLink>

</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Image" CancelText="" DeleteImageUrl="~/Image/icon/icon-remove.gif"
DeleteText="حذف" EditText="" InsertText="" NewText="" SelectText="" ShowDeleteButton="True"
ShowHeader="True" UpdateText="" />
</Columns>
</asp:GridView>

و حالا میخواهم از این روش استفاده نکنم لطفاً یک روش خوب و بهینه برای این کار جایگزین کنم و از آن استفاده کنم !!
در ضمن اگر امکان دارد روش ساخت کلید Delet را هم بیان کنید چون همان طور که میبینید در کد بالا من آرگومان را که برابر آی دی سطر میباشد برای دکمه حذف فرسادم ولی این روش فقط در رویداد RowCommand کار داد و من میخواهم در رویداد Delete بنویسم که خطا گرفت اگه میشه راهنمایی کنید !!
در RowCommand اینجوری نوشتم :

public partial class DataGrid : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand();
SqlDataAdapter dat = new SqlDataAdapter();
DataSet dst = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{

}
protected void gdvAuthors_RowCommand(object sender, GridViewCommandEventArgs e)
{
cmd.Connection = con;
cmd.CommandText = "Delete From TBinfo where id=@id";
cmd.CommandType = CommandType.Text;
string r = e.CommandArgument.ToString();
cmd.Parameters.AddWithValue("@id", int.Parse(r));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
در ضمن اگه میشه بگید که چگونه به سطر های دیتاست دسترسی داشته باشم و مثلا از سطر اول ستون نام را در یک متغییر ذخیره کنم !!

abadanboy
یک شنبه 29 مهر 1386, 16:24 عصر
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<HTML>
<title>Updating Data in a Database</title>
<script language="C#" runat="server">
SqlConnection mySqlCon;
protected void Page_Load(Object Src, EventArgs e)
{
Response.Write("<center><b><u>Updating Data</center></b></u><br>");
mySqlCon = new SqlConnection ("server=RAYAN-04;uid=t1;pwd=123456;database=pubs");
if(!IsPostBack)
BindGrid();
}
public void dbgMyGrid_Edit(Object sender, DataGridCommandEventArgs eee)
{
dbgMyGrid.Columns[0].HeaderText="Edit";
dbgMyGrid.EditItemIndex = (int)eee.Item.ItemIndex;
BindGrid();
}
public void dbgMyGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
dbgMyGrid.Columns[0].HeaderText="Cancel";
dbgMyGrid.EditItemIndex = -1;
BindGrid();
}
public void dbgMyGrid_Update(Object sender, DataGridCommandEventArgs e)
{
dbgMyGrid.Columns[0].HeaderText="Update";
string strUpdate = "UPDATE Publishers SET pub_id = @pubid, pub_name = @pubname, city = @city, state = @state, country = @country WHERE pub_id = @pubid";
SqlCommand mySqlCmd = new SqlCommand(strUpdate, mySqlCon);
mySqlCmd.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4));
mySqlCmd.Parameters.Add(new SqlParameter ("@pubname",
SqlDbType.VarChar, 40));
mySqlCmd.Parameters.Add(new SqlParameter ("@city",
SqlDbType.VarChar, 20));
mySqlCmd.Parameters.Add(new SqlParameter("@state",
SqlDbType.Char, 2));
mySqlCmd.Parameters.Add(new SqlParameter("@country",
SqlDbType.VarChar, 30));

mySqlCmd.Parameters ["@pubid"]. Value = dbgMyGrid.DataKeys
[(int)e.Item.ItemIndex];
mySqlCmd.Parameters ["@pubname"].Value=((TextBox)e.Item.
Cells[2].Controls[0]).Text;
mySqlCmd.Parameters ["@city"]. Value = ((TextBox)e.Item.
Cells[3].Controls[0]).Text;
mySqlCmd.Parameters ["@state"].Value = ((TextBox)e.Item.
Cells[4].Controls[0]).Text;
mySqlCmd.Parameters ["@country"].Value = ((TextBox)e.Item.
Cells[5].Controls[0]).Text;
mySqlCon.Open();

try
{
mySqlCmd.ExecuteNonQuery();
lblMessage.Text = "<b>Record Updated</b><br>" ;
dbgMyGrid.EditItemIndex = -1;
}
catch(SqlException exc)
{
if (exc.Number == 2627)
lblMessage.Text = "ERROR: A record already exists with the same primary key";
else
lblMessage.Text = exc.ToString() + "ERROR: Could not update record, please ensure the fields are correctly filled out";
}

mySqlCon.Close();
BindGrid();
}
public void BindGrid()
{
SqlDataAdapter mySqlda = new SqlDataAdapter ("select * from publishers", mySqlCon);
DataSet myds = new DataSet();
mySqlda.Fill(myds, "publishers");
dbgMyGrid.DataSource = myds.Tables ["publishers"]. DefaultView;
dbgMyGrid.DataBind();
}
</script>
<body>
<form id="Form1" runat="server">
<h4><asp:label id="lblMessage" runat="server"> </asp:label> </h4><br>
<ASP:Datagrid id="dbgMyGrid" runat="server" DataKeyField="pub_id" OnUpdateCommand="dbgMyGrid_Update" OnCancelCommand ="dbgMyGrid_Cancel" OnEditCommand= "dbgMyGrid_Edit">
<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText ="Cancel" UpdateText="Update" />
</Columns>
</ASP:Datagrid></form>
</body>
</HTML>

abadanboy
یک شنبه 29 مهر 1386, 16:27 عصر
یادم رفت فراخونی مقادیر رو هم می خواستی ایناش



void bound()
{
cn.Open();
cmd.CommandText = "select * from TblSetting";
cmd.Connection = cn;
reader = cmd.ExecuteReader();
if (reader.Read())
{
txtminday.Text = reader.GetValue(1).ToString().Trim();
txtmaxday.Text = reader.GetValue(2).ToString().Trim();
txtbmin.Text = reader.GetValue(3).ToString().Trim();
txtbmax.Text = reader.GetValue(4).ToString().Trim();
txteprice.Text = reader.GetValue(5).ToString().Trim();
txtmaxpnum.Text = reader.GetValue(6).ToString().Trim();
txtslaw.Text = reader.GetValue(7).ToString().Trim();
txtrlaw.Text = reader.GetValue(8).ToString().Trim();
}
reader.Close();
cn.Close();
}

merlin_vista
یک شنبه 29 مهر 1386, 17:41 عصر
آقا ممنون از کمکی که کردید . ببخشید من همیشه مزاحم هستم. من TEST میکنم و جواب میدم

merlin_vista
یک شنبه 29 مهر 1386, 22:53 عصر
اقا من از کدهای شما استفاده کردم و خیلی خوب بود !!
حالا اینها که داده بودی مال دیتاگرید بود که من برای GridView هم نوشتم
فقط این مشکل را داشتم . اون هم اینه که این کد مال دیتاگرید کار میده :

ySqlCmd.Parameters["@lname"].Value = ((TextBox)e.Item.Cells[3].Controls[0]).Text;ولی من برابر این کد را برای GridٌView میخواهم اگه میشه بدین !!
فقط همون قسمت آخر را میخواهم یعنی بعد از "="

merlin_vista
یک شنبه 29 مهر 1386, 22:57 عصر
راستی برابر این کد را هم میخواهم و دوباره بعد از "="

mySqlCmd.Parameters["@id"].Value = this.GridView1.DataKeys[(int)e.NewValues];

merlin_vista
یک شنبه 29 مهر 1386, 22:58 عصر
راستی برابر این کد را هم میخواهم و دوباره بعد از "="

mySqlCmd.Parameters["@id"].Value = this.GridView1.DataKeys[(int)e.NewValues];

merlin_vista
یک شنبه 29 مهر 1386, 22:59 عصر
راستی برابر این کد را هم میخواهم و دوباره بعد از "="

mySqlCmd.Parameters["@id"].Value = this.GridView1.DataKeys[(int)e.NewValues];

آقا ببخشید که من اینقدر مزاحم میشم !! :قلب:

merlin_vista
یک شنبه 29 مهر 1386, 23:02 عصر
آخ نمیدونم چرا خطای دیتابیس داد فروم ولی ثبت کرد !!!
ببخشید !!

abadanboy
دوشنبه 30 مهر 1386, 08:18 صبح
یه خورده روش فکر کن درستش می کنی ولی من تا عصر سعی می کنم واست بزارمش

merlin_vista
دوشنبه 30 مهر 1386, 09:44 صبح
آقا من ایینجوری نوشتم (یعنی تو MSDN بود )

((DataKey)this.GridView1.DataKeys[e.RowIndex]).Value;
ولی کار نداد به قسمت :RowIndex گیر میده !!
حالا نمیدونم اصلاً درست هست یا نه ؛ شما چی میگید !!

merlin_vista
دوشنبه 30 مهر 1386, 09:52 صبح
راستی من برای صفحه بندی اینا در DataGrid مینوشتم ولی واسه گرید ویو کار نداد !!

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
this.GridView1.CurrentPageIndex = e.NewPageIndex;
this.GridView1.DataBind();
}

merlin_vista
دوشنبه 30 مهر 1386, 13:28 عصر
برای ID سطر اینجوری نوشتم فکر کنم درست باشه ولی برای بقیه نه هنوز :

mySqlCmd.Parameters["@id"].Value =e.Keys[0];

merlin_vista
دوشنبه 30 مهر 1386, 17:11 عصر
آقا من برای دکمه UPDATE این را نوشتم ولی کار نمیده کسی میتونه اصلاخ کنه !! :

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
string strUpdate = "UPDATE TBinfo SET fname = @fname,lname= @lname, email = @email, websit = @websit,tel = @tel WHERE id = @id";
SqlCommand mySqlCmd = new SqlCommand(strUpdate, con);

mySqlCmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));
mySqlCmd.Parameters.Add(new SqlParameter("@fname", SqlDbType.NVarChar, 50));
mySqlCmd.Parameters.Add(new SqlParameter("@lname", SqlDbType.NVarChar, 50));
mySqlCmd.Parameters.Add(new SqlParameter("@email", SqlDbType.NVarChar, 50));
mySqlCmd.Parameters.Add(new SqlParameter("@websit", SqlDbType.NVarChar, 50));
mySqlCmd.Parameters.Add(new SqlParameter("@tel", SqlDbType.NVarChar, 50));

mySqlCmd.Parameters["@id"].Value = e.Keys[0];
mySqlCmd.Parameters["@lname"].Value = ((TextBox)GridView1.Rows[0].Cells[1].Controls[0]).Text;
mySqlCmd.Parameters["@fname"].Value = ((TextBox)GridView1.Rows[0].Cells[2].Controls[0]).Text;
mySqlCmd.Parameters["@email"].Value = ((TextBox)GridView1.Rows[0].Cells[3].Controls[0]).Text;
mySqlCmd.Parameters["@websit"].Value = ((TextBox)GridView1.Rows[0].Cells[4].Controls[0]).Text;
mySqlCmd.Parameters["@tel"].Value = ((TextBox)GridView1.Rows[0].Cells[5].Controls[0]).Text;
con.Open();
mySqlCmd.ExecuteNonQuery();
con.Close();
this.GridView1.EditIndex = -1;
}
ولی این خطا را میده تو صفحه وب مرورگر

The GridView 'GridView1' fired event RowUpdating which wasn't handled.

merlin_vista
دوشنبه 30 مهر 1386, 23:04 عصر
آقا کمک کنید !! خیلی واجبه !!

abadanboy
سه شنبه 01 آبان 1386, 09:06 صبح
اینم آپدیت گرید ویو