Archivos de la categoría ‘.net’

Cómo se pasa un código de color en HTML a un objeto de .NET

14 Julio 2009

Problema: Tengo un un código de color en HTML (Por ejemplo #E8E8F3 y quiero usarlo en .NET, pero no puedo usarlo directamente porque los colores en .NET tienen que ser de la clase System.Drawing.Color y no sé a qué color se corresponde.

Solución: Usar la siguiente función

System.Drawing.ColorTranslator.FromHtml("#E8E8F3")

Y si lo queremos a la inversa, esto nos convertiría un System.Drawing.Color en una cadena con el código HTML

System.Drawing.ColorTranslator.ToHtml(color);

Problemas al publicar formularios infopath en sharepoint

24 Marzo 2009

Problema: Al ir a publicar un formulario infopath que lleva código en un servidor Sharepoint, cuando va a hacer el build del código, me sale un error diciendo que ha habido un error al compilar el código asociado al formulario. Sin embargo, si le hago el build a la solución desde el editor, la solución compila bien.

Solución:  Comprueba que la ruta a la carpeta donde se encuentra la solución no sea demasiado larga. Se puede hacer la prueba moviendo la carpeta con la solución al directorio raiz, e indicarle a infopath la nueva ruta de la solución.

Problemas al usar callbacks simultáneos en asp.net

25 Febrero 2009

Problema: Estoy usando callbacks para traerme datos del servidor (implementando el interfaz System.Web.UI.ICallbackEventHandler) , pero cuando lanzo varios a la vez (es decir, que algunos callbacks empiezan sin que hayan terminado los anteriores) esto no parece comportarse como debiera.

Solución: Hay un error en la implementación del método WebForm_CallbackComplete() que es generado por asp.net cuando estamos usando el método  Page.ClientScript.GetCallbackEventReference para que nos cree los scripts necesarios para realizar los callbacks (versión de cuando escribo esto: .NET 3.5)
Para arreglarlo hay que sustituir la función en cuestión por ésta otra. Para ello la incluimos en nuestra página aspx:

function WebForm_CallbackComplete_SyncFixed() {
  for (var i = 0; i < __pendingCallbacks.length; i++) {
   callbackObject = __pendingCallbacks[ i ];
  if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
      if (!__pendingCallbacks[ i ].async) {
     __synchronousCallBackIndex = -1;
   }
   __pendingCallbacks[i] = null;
   var callbackFrameID = "__CALLBACKFRAME" + i;
   var xmlRequestFrame = document.getElementById(callbackFrameID);
   if (xmlRequestFrame) {
     xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
   }
   WebForm_ExecuteCallback(callbackObject);
  }
 }
}

Y para que nuestra página use esta función en vez de la que da problemas, incluimos también esto al final de la página:

if (typeof (WebForm_CallbackComplete) == "function") {
  WebForm_CallbackComplete = WebForm_CallbackComplete_SyncFixed;
}

El código para la solución ha sido tomado de aquí

¿Qué tipo de columnas enlazadas a datos se le pueden meter a un gridview?

16 Enero 2009

Problema: ¿Cuáles son los tipos de columna que se le pueden meter a un gridview que está enlazado a datos? y luego, ¿cómo puedo acceder a los datos ?

Solución: En éste enlace se pueden ver los tipos de columnas
http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.datacontrolfield(VS.80).aspx

Y para acceder a los datos, usaremos el evento RowDataBound, el cual se lanza después de que se haya realizado un bind a una fila por cada registro. Como parámetro nos llegará la fila a la que se le acaba de hacer el bind, y para acceder a los datos solo tendremos que hacer lo siguiente:

String texto = ((DataRowView) e.Row.DataItem)["campodelaquerydeldataset"].ToString();

Donde “e” sería el argumento del evento que contiene a la fila afectada.

Extraer el XML formateado de un objeto XMLDocument

10 Diciembre 2008

Problema: Tengo un objeto XmlDocument y quiero sacar el xml para meterlo en un objeto string. La propiedad innerXml no me vale porque me sale sin formatear, sin saltos de línea ni tabulaciones.

Solución: Usar un objeto XmlTextWriter. Para guardarlo en un objeto string necesitamos además un objeto StringWriter. Quedaría tal que así:

Using System.Xml;
Using System.IO;
StringWriter sw = new StringWriter();
 XmlTextWriter xw = new XmlTextWriter(sw);
 xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
 string resultado = sw.ToString();

(doc en este ejemplo se corresponde al objeto XmlDocument que contiene el xml)

Líos con .NET, XML, Prefijos y Namespaces

10 Diciembre 2008

Problema: Estoy trabajando en .net con xml, usando para ello un objeto System.Xml.XmlDocument . El xml tiene unos prefijos delante del nombre de las etiquetas, y cuando intento operar con los nodos del documento me salen errores del tipo “Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.”

Solución: Los prefijos se corresponden a espacios de nombres (namespaces) de xml. Para poder trabajar con ellos debemos declarar el namespace y agregarlo a un objeto XmlNameSpaceManager. Luego en los métodos, deberemos incluir este objeto como un parámetro más.

Ejemplo:
string mgrName = “http://miNamespace.com“;
XmlNamespaceManager mgr = new XmlNamespaceManager(new NameTable());
mgr.AddNamespace(“p”, mgrName); 

(donde ”p” sería el prefijo de las etiquetas)

Como pasar caracteres especiales al método select de un datatable

29 Septiembre 2008

Problema. Voy a usar el método select de un datatable para traerme unas filas, pero en la expresión tengo que incluir un caracter especial (Por ej. el ‘%’) y no sé cómo se indica esto.

Solución. Introducir el caracter especial entre corchetes: Ej. “columna like valor[%]“
Si necesitáramos incluir un corchete, tendríamos que hacerlo con la barra invertida. Ej: “\]”

Mas información sobre las expresiones de datatable.select aquí:
http://msdn.microsoft.com/es-es/library/system.data.datacolumn.expression(VS.80).aspx

CollapsiblePanelExtender no aparece inicialmente colapsado

6 Marzo 2008

Problema: Un panel asociado a un CollapsiblePanelExtender que tiene como estado inicial colapsado, aparece durante medio segundo desplegado cuando la página termina de cargar.

Solución: Poner la propiedad del panel Height con valor “0px” y la propiedad Css overflow con valor “hidden”