PDA

View Full Version : سوال: مشکل در hyperlink گریدویو-غیر تکراری و خیلی فوری



msozan
دوشنبه 12 بهمن 1388, 08:10 صبح
یکی از ستون های گریدویو رو با hyperlink که id جدول هست،پر کردم منتها من از یه multiview استفاده کردم که گریدویو درون view1 قرار داره.
حالا من میخوام وقتی کاربر روی hyperlink که همون آی دی هست کلیک میکنه یه کد جرا بشه(که شامل پر کردن کمبوباکس view2 هست) و view2 نمایش داده بشه
حالا چطوری توقسمت Navigateurl بگم که همون صفحه رو نمایش بده منتها view2 رو.

maxpayn2
دوشنبه 12 بهمن 1388, 08:29 صبح
چرا از لینک استفاده میکنی ؟ یک دکمه بزار و CommandArgument رو برابر با id قرار بده و CommandName رو برابر با view2 ، در رویداد RowCommand چک کن اگه CommandName برابر با view2 بود ...

msozan
دوشنبه 12 بهمن 1388, 10:06 صبح
ممنون از maxpayn2 عزیز
دکمه که خاصیت CommandArgument نداره و اینکه محتوای باتن باید آی دی 10 رقمی باشه میشه یا نه؟
ممنون میشم دوباره راهنماییم کنید

msozan
دوشنبه 12 بهمن 1388, 10:41 صبح
ممنون مشکلم تا حدی حل شد ولی حالا در رویداد Rowcommand چطوری به تک تک فیلدهای اون سطر دسترسی داشته باشم
چون در رویداد SelectindexChange با دستور
gridview.DataKeys[gridview.SelectedIndex].Values[0].ToString();
میتونیم به فیلدها دسترسی داشته باشیم ولی در رویداد Rowcommand خطا میده.

msozan
دوشنبه 12 بهمن 1388, 11:28 صبح
Please Help Meeeeeeeeeeeeeeeeeeeeeeee!

maxpayn2
دوشنبه 12 بهمن 1388, 13:18 عصر
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand"
DataSourceID="SqlDataSource1" Width="400px"
onselectedindexchanged="GridView1_SelectedIndexChanged">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btndelete" runat="server" Text="حذف" CommandArgument='<%#Eval("user_id")%>' CommandName="Delete" CausesValidation="false" />
</ItemTemplate>
<ItemStyle Font-Names="Tahoma" Width="50" HorizontalAlign="Center" />
<HeaderStyle Font-Names="Tahoma" Width="50" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnselect" runat="server" Text="انتخاب" CommandArgument='<%#Eval("user_id")%>' CommandName="Select" CausesValidation="false" />
</ItemTemplate>
<ItemStyle Font-Names="Tahoma" Width="50" HorizontalAlign="Center" />
<HeaderStyle Font-Names="Tahoma" Width="50" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="نام کاربر">
<ItemTemplate>
&nbsp;<%#Eval("user_name")%>
</ItemTemplate>
<ItemStyle Font-Names="Tahoma" />
<HeaderStyle Font-Names="Tahoma" />
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<asp:Label ID="Label4" runat="server" Text="در حال حاضر کاربری برای ویرایش موجود نیست"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:tconetConnectionString %>"
DeleteCommand="delete_user"
DeleteCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>




protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (role == true)
{
Session["id"] = Convert.ToInt32(e.CommandArgument.ToString());
}
if (e.CommandName == "Delete")
{
Session["command"] = "delete";
}
if (e.CommandName == "Select")
{
Session["command"] = "select";
}

if (Session["command"].ToString() == "delete")
{
if (role == true)
{
SqlConnection cnn2 = new SqlConnection();
try
{
cnn2.ConnectionString = "Data Source=.;Database=mydb;Integrated Security=SSPI";
cnn2.Open();
SqlCommand cmd2 = new SqlCommand("delete_user", cnn2);
cmd2.CommandType = CommandType.StoredProcedure;

cmd2.Parameters.AddWithValue("@id", Convert.ToInt32(Session["id"].ToString()));

cmd2.ExecuteNonQuery();

cnn2.Close();

GridView1.DataBind();
}
catch (Exception ex)
{
Server.Transfer("~/ExceptionReport.aspx?id=" + ex.Message.ToString() + "&urle=" + Request.Url.ToString());
}
finally
{
cnn2.Close();
}
}
}

}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (Session["command"].ToString() == "select")
{
if (role == true)
{
SqlConnection cnn1 = new SqlConnection();

try
{

try
{
cnn1.ConnectionString = "Data Source=.;Database=mydb;Integrated Security=SSPI";
cnn1.Open();
SqlCommand cmd1 = new SqlCommand("select_users", cnn1);
cmd1.CommandType = CommandType.StoredProcedure;

cmd1.Parameters.AddWithValue("@id", Convert.ToInt32(Session["id"].ToString()));

SqlDataReader dr1 = cmd1.ExecuteReader();

userNameTextBox.Text = "";
passwordTextBox.Text = "";
passwordConfTextBox.Text = "";

if (dr1.Read())
{
userNameTextBox.Text = dr1[1].ToString();
departmentDropDownList.SelectedValue = dr1[3].ToString();
roleDropDownList.SelectedValue = dr1[4].ToString();
}

cnn1.Close();
}
finally
{
cnn1.Close();
}
}
catch (Exception ex)
{
Server.Transfer("~/ExceptionReport.aspx?id=" + ex.Message.ToString() + "&urle=" + Request.Url.ToString());
}
finally
{
cnn1.Close();
}
}
}
}



این کد رو 2 سال پیش نوشتم ، شاید مبتدی به نظر برسه

msozan
سه شنبه 13 بهمن 1388, 08:00 صبح
ممنون از راهنماییتون
کدی که شما قید کردید یه ستون به گریدویو به عنوان فیلد انتخاب اضافه می کنه ولی من نمی خوم فیلد اضافه کنم ولی در واقع می خوام ستون آی دی رو به صورت حالا یه دکمه یا hypertext در بیارم که کاربر وقتی روش کلیک کرد من بتونم مقدار تمامی فیلدهای اون id رو بهش دسترسی داشته باشم.
و در view2ازش استفاده کنم.

maxpayn2
سه شنبه 13 بهمن 1388, 08:07 صبح
اون کد یه راهنماییه ، قرار نیست عین اون بنویسی

msozan
سه شنبه 13 بهمن 1388, 09:05 صبح
من کدتون رو میفهمم
فقط ممنون میشم اگه بهم توضیح بدید که چطوری میتونم به تک تک فیلدهای سطر انتخاب شده دسترسی داشته باشم

msozan
سه شنبه 13 بهمن 1388, 10:08 صبح
بابا یکی کمک کنه
چیزی زیاد مشکلی نیست ببینید خود گریدویو یه ستون select داره که اگر روش کلیک کنیم selectindexchange اجرا میشه حالا چطوری میتونم به این ستون مقدار بدم مثلا بجای اینکه این ستون،ستون انتخاب باشه با کد ملی یا آیدی جدول پر بشه

maxpayn2
سه شنبه 13 بهمن 1388, 10:35 صبح
من کدتون رو میفهمم
فقط ممنون میشم اگه بهم توضیح بدید که چطوری میتونم به تک تک فیلدهای سطر انتخاب شده دسترسی داشته باشم

اگه کد رو کامل فهمیدی باید متوجه میشدی که وقتی کاربر روی دکمه انتخاب کلیک میکنه آی دی رو بدست میاری و بعدش نسبت به اون آی دی یک Select میزنی و تمام اطلاعات اون آی دی رو بدست میاری