segunda-feira, 22 de novembro de 2010

ASP.NET - Aceder parâmetros SQLDataSource

<asp:GridView AutoGenerateEditButton="true"AutoGenerateColumns="false" DataKeyNames="UserID"DataSourceID="SqlDataSource1" ID="gvUsers" runat="server"OnRowUpdating="gvUsers_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="UserName">
<ItemTemplate>
<asp:Label ID="lblUserName" runat="server" Text='<%# Eval("UserName") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtUserName" Enabled="false" runat="server"Text = '<%# Bind("UserName") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FirstName" HeaderText="First Name"/>
<asp:BoundField DataField="LastName" HeaderText="Last Name"/>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"ConnectionString= "<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM Users" UpdateCommand="UPDATE Users SET UserName = @UserName, FirstName = @FirstName, LastName = @LastName WHERE UserID = @UserID"OnUpdating="SqlDataSource1_Updating">
<UpdateParameters>
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="UserName" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
Agora, considere uma situação onde você não deseja exibir o nome do banco de dados, mas você quer mostrar o usuário atual no TextBox txtUsername. Para isso, você pode facilmente criar um método protegido e uso de DataBind para exibir o nome de usuário no TextBox txtUsername.

protected string GetUserName()

{

// This can also be User.Identity.Name

return "AzamSharp";

}

And in the GridView you can use something like this:


<EditItemTemplate>

<asp:TextBox ID="txtUserName" Enabled="false" runat="server"Text = '<%# GetUserName() %>' />

</EditItemTemplate>
Mas, agora a questão é que como você vai atualizar o nome de usuário ou enviar o nome de usuário para o banco de dados. Você não pode usar ControlParameter desde o nome da TextBox para cada linha GridView é diferente. No entanto, pode adicionar atribuir o parâmetro no evento Updating SqlDataSource.
protected void SqlDataSource1_Updating(object sender,SqlDataSourceCommandEventArgs e)
{
// Attach another parameter
e.Command.Parameters["@UserName"].Value = GetUserName();
}
This will insert the username "AzamSharp" in the database. Offcourse you can use User.Identity.Name to get the current logged user.

Sem comentários:

Enviar um comentário