The best way i've found about this question is using Expression Builder in your solution.
With this feature you can create a custom inline expression and use it in the SqlDataSource tag.
Yuo'll find some examples right here:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
That's how i implemented in my apps:
[ExpressionPrefix("RepConnectionString")]
public class RepConnectionStringExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
CodeTypeReferenceExpression thisType = new CodeTypeReferenceExpression(base.GetType());
CodePrimitiveExpression expression = new CodePrimitiveExpression(entry.Expression.Trim().ToString());
string evaluationMethod = "GetConnectionString";
return new CodeMethodInvokeExpression(thisType, evaluationMethod, new CodeExpression[] { expression });
}
public static string GetConnectionString(string expression)
{
XmlDocument xmlDoc = new XmlDocument();
string wPath = HttpContext.Current.Server.MapPath("~/XmlFile.xml");
xmlDoc.Load(wPath);
XmlNode wNode = xmlDoc.SelectSingleNode("Autenticacoes/Database[@id='" + expression + "']");
string wConnString = "";
if (wNode != null)
{
wConnString = "Data Source=" + wNode.Attributes["servidor"].Value + ";Initial Catalog=" + wNode.Attributes["db"].Value + ";Persist Security Info=True;User ID=" + wNode.Attributes["login"].Value + ";Password=" + wNode.Attributes["senha"].Value;
}
return wConnString;
}
}
in the web.config:
<compilation>
<expressionBuilders>
<add expressionPrefix="RepConnectionString" type="RepConnectionStringExpressionBuilder"/>
</expressionBuilders>