PDA

View Full Version : مشکل با datakey



hossein1368
پنج شنبه 09 اسفند 1386, 18:44 عصر
سلام

سوالی داشتم در مورد بدست آوردن datakey سطر انتخاب شده
من از این کد استفاده میکنم اما اگه تعداد رکوردهای موجود در گرید بیشتر از یکی باشه فقط یک عدد رو برمیگردونه فرقی نمیکنه که کدوم سطرو انتخاب کرده باشم . ( مقدار برگشتی همواره بزرگترین id موجود هست)



strdatakey = GridView1.DataKeys(0).Value.ToString()


Help me ...

asi_hesam
جمعه 10 اسفند 1386, 00:23 صبح
این روش رو امتحان کن به نظرم مشکلت حل بشه



protectedvoid GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
نام متغیر = this.GridView1.SelectedRow.Cells[شماره ستونی که میخوای مقدراشو به دست بیاری].Text.ToString();}

hossein1368
جمعه 10 اسفند 1386, 09:07 صبح
درسته
ولی در صورتی که من ستونی با نام id داخل گرید داشته باشم
درصورتی که من خصوصیت datafield key رو با مقدار فیلد کلیدم مقداردهی کردم در واقع ستونی به عنوان شناسه یا کلید اصلی داخل گرید ندارم و به دلایلی نمیخوام کلید اصلی نمایش داده بشه
منظور من دسترسی به فیلد کلید سطر انتخاب شده است نه مقدار ستونی خاص

merlin_vista
جمعه 10 اسفند 1386, 09:24 صبح
برای دسترسی به آی دی سطر کلیک شده :

GridView1.DataKeys[e.RowIndex].Value

در ضمن برای GridView1 باید DataKeyNames را مشخص کنی : (به عنوان مثال )


DataKeyNames="id"

-
به عنوان مثال عملی ‌:

ASPX


<asp:GridView id="GridView1" runat="server" ForeColor="Black" CssClass="ft" Width="700px" BackColor="White" OnRowDeleting="GridView1_RowDeleting" GridLines="Vertical" DataKeyNames="id" CellPadding="4" BorderWidth="1px" BorderStyle="None" BorderColor="#DEDFDE" AutoGenerateColumns="False" OnPageIndexChanging="GridView1_PageIndexChanging" AllowPaging="True" PageSize="30">
<PagerSettings Position="TopAndBottom"></PagerSettings>

<FooterStyle BackColor="#CCCC99"></FooterStyle>
<Columns>
<asp:TemplateField><ItemTemplate>
<asp:HyperLink ID="HyperLink2" runat="server" ImageUrl="~/Images/icon/edit.png" NavigateUrl='<%# "EditRateRequest.aspx?id=" + Eval("id").ToString() %>'
Target="_blank" ToolTip="ویرایش اطلاعات"></asp:HyperLink>
&nbsp;<asp:HyperLink ID="HyperLink1" runat="server" ImageUrl="~/Images/icon/Update.png"
NavigateUrl='<%# "ViewRateRequest.aspx?id=" + Eval("id").ToString()+"&melk="+Eval("melk").ToString() +"&RateRequest="+Eval("malek").ToString()+"&select=RateRequestForm" %>'
Target="_blank" ToolTip="نمایش اطلاعات کامل و چاپ"></asp:HyperLink>
<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete"
ImageUrl="~/Images/icon/delete.gif" Text="Delete" ToolTip="آرشیو کردن" />

</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="MaxRhnPrice" HeaderText="حداکثر قیمت رهن"></asp:BoundField>
<asp:BoundField DataField="MaxEjarePrice" HeaderText="حداکثر قیمت اجاره"></asp:BoundField>
<asp:BoundField DataField="Maxmetraj" HeaderText="حداکثر متراژ"></asp:BoundField>
<asp:TemplateField HeaderText="ثبت کننده"><ItemTemplate>
<asp:Label ID="Label8" runat="server" CssClass="ft" Text='<%# Eval("Reg").ToString().Trim() %>'></asp:Label>

</ItemTemplate>
</asp:TemplateField>
</Columns>

<RowStyle BackColor="#F7F7DE"></RowStyle>
<EmptyDataTemplate>
<asp:Label ID="Label14" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="10pt"
ForeColor="Green" Text="هیچ موردی یافت نشد"></asp:Label>

</EmptyDataTemplate>

<SelectedRowStyle BackColor="#CE5D5A" ForeColor="White" Font-Bold="True"></SelectedRowStyle>

<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right"></PagerStyle>

<HeaderStyle BackColor="#6B696B" ForeColor="White" Font-Bold="True"></HeaderStyle>

<AlternatingRowStyle BackColor="White"></AlternatingRowStyle>
</asp:GridView>

C# :


protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string strDelete = "DELETE FROM RateRequestForm WHERE id = @id";
SqlCommand mySqlCmd = new SqlCommand(strDelete, con);
mySqlCmd.CommandType = CommandType.Text;
mySqlCmd.Parameters.AddWithValue("@id", GridView1.DataKeys[e.RowIndex].Value);
con.Open();
mySqlCmd.ExecuteNonQuery();
con.Close();
BindExpaier();

}

hossein1368
جمعه 10 اسفند 1386, 10:25 صبح
اگه بخواهیم توی
GridView1_RowCommand بنویسیم چی دیگه rowindex نداریم

hossein1368
جمعه 10 اسفند 1386, 19:27 عصر
دوستان مشکلم حل
از این روش استفاده کردم :
مقدار فیلد id رو بصورت CommandArgument به linkbutton مورد تخصیص دادم و بعد با کد ذیل مقدار فیلد id رو برگردوندم

کد linkbutton در gridview :


<ItemTemplate>
<asp:LinkButtonID="LinkButton2"runat="server"CommandName="del"CommandArgument='<%# Eval("id") %>'ForeColor="#3283BE"></asp:LinkButton>
</ItemTemplate>


کد فراخوانی مقدار کلید :


ProtectedSub GridView1_RowCommand(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs ) Handles GridView1.RowCommand
Dim strdatakey AsString
If e.CommandName = "del"Then
strdatakey = Convert.ToInt32(e.CommandArgument).ToString()
EndIf
EndSub


ضمنا از دوستان عزیزی که راهنمایی فرمودند متشکرم

asi_hesam
یک شنبه 12 اسفند 1386, 00:18 صبح
ولی در این صورت مقدار تو گرید دیده میشه . نمیشه؟؟؟

Mojtaba_ss
دوشنبه 13 اسفند 1386, 20:20 عصر
ولی در این صورت مقدار تو گرید دیده میشه . نمیشه؟؟؟

نه نمایش داده نمیشه
فقط خصوصیت text مربوط به linkbutton نمایش داده میشه